据我所知,PyList_SetItem 和 PyList_SETITEM 之间的区别在于 PyList_SetItem 会降低它覆盖的列表项的引用计数,而 PyList_SETITEM 不会。
有什么理由不应该一直使用 PyList_SetItem 吗?或者如果我使用 PyList_SetItem 来初始化列表中的索引位置,我会遇到麻烦吗?
据我所知,PyList_SetItem 和 PyList_SETITEM 之间的区别在于 PyList_SetItem 会降低它覆盖的列表项的引用计数,而 PyList_SETITEM 不会。
有什么理由不应该一直使用 PyList_SetItem 吗?或者如果我使用 PyList_SetItem 来初始化列表中的索引位置,我会遇到麻烦吗?
PyList_SET_ITEM
是一个不安全的宏,它基本上将一个对象粘贴到列表的内部指针数组中,而不进行任何绑定检查。NULL
如果列表的第 th 位置有任何非i
-,则会发生参考泄漏。PyList_SET_ITEM
窃取对您放入列表中的对象的引用。PyList_SetItem
也窃取了引用,但它会检查边界并删除可能位于第i
th 位置的任何内容。经验法则PyList_SET_ITEM
用于初始化您刚刚创建的列表,PyList_SetItem
否则。在任何地方使用也完全安全PyList_SetItem
;PyList_SET_ITEM
基本上是一个速度黑客。