8

据我所知,PyList_SetItem 和 PyList_SETITEM 之间的区别在于 PyList_SetItem 会降低它覆盖的列表项的引用计数,而 PyList_SETITEM 不会。

有什么理由不应该一直使用 PyList_SetItem 吗?或者如果我使用 PyList_SetItem 来初始化列表中的索引位置,我会遇到麻烦吗?

4

1 回答 1

8

PyList_SET_ITEM是一个不安全的宏,它基本上将一个对象粘贴到列表的内部指针数组中,而不进行任何绑定检查。NULL如果列表的第 th 位置有任何非i-,则会发生参考泄漏。PyList_SET_ITEM窃取对您放入列表中的对象的引用。PyList_SetItem也窃取了引用,但它会检查边界并删除可能位于第ith 位置的任何内容。经验法则PyList_SET_ITEM用于初始化您刚刚创建的列表,PyList_SetItem否则。在任何地方使用也完全安全PyList_SetItemPyList_SET_ITEM基本上是一个速度黑客。

于 2012-04-24T20:43:19.563 回答