PyList_SetItem与PyList_SETITEM

use*_*262 7 python python-c-extension

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

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

Ben*_*son 6

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

  • 绝对不.事实上,这可能是最安全的方式.`PyList_SET_ITEM`主要是速度黑客. (2认同)