Python 向列表添加元素时的引用计数
从 我读到这一行: “PyList_SetItem不会增加新项目的引用 计数,但会减少其替换项的引用计数, 如果不是nil,则会减少引用计数(如果不是) 插入列表中。类似地,PyList_GetItem不会增加 已返回项目的引用计数。“ 但当我测试元素的引用计数时,它增加了Python 向列表添加元素时的引用计数,python,list,reference,Python,List,Reference,从 我读到这一行: “PyList_SetItem不会增加新项目的引用 计数,但会减少其替换项的引用计数, 如果不是nil,则会减少引用计数(如果不是) 插入列表中。类似地,PyList_GetItem不会增加 已返回项目的引用计数。“ 但当我测试元素的引用计数时,它增加了 >>> a = 'abc' >>> sys.getrefcount(a) 3 >>> ls = [1,2] >>> ls.append(a) >&
>>> a = 'abc'
>>> sys.getrefcount(a)
3
>>> ls = [1,2]
>>> ls.append(a)
>>> ls
[1, 2, 'abc']
>>> sys.getrefcount(a)
4
>>> ls.insert(1,a)
>>> sys.getrefcount(a)
5
>>>
如果我错了,请纠正我,或者解释它是如何实现的?执行
append
知道PyList\u SetItem
的这个怪癖,并处理引用计数增量
这是唯一可行的方法。引用计数实际上是实现的一个方面,尽管如此--getrefcount
,Python程序员不必处理这些问题
换句话说,如果您正在用C编写扩展,您只需担心API是否窃取引用或生成新引用。如果您坚持使用Python,您是安全的。这基本上意味着
PyList\u SetItem
的调用方必须负责引用计数
在append
的情况下,它是在一个简单的包装器中实现的
也调用into,这也是。那么如何调用PyList_SetItem呢?ls=列表(a)