Python 向列表添加元素时的引用计数

Python 向列表添加元素时的引用计数,python,list,reference,Python,List,Reference,从 我读到这一行: “PyList_SetItem不会增加新项目的引用 计数,但会减少其替换项的引用计数, 如果不是nil,则会减少引用计数(如果不是) 插入列表中。类似地,PyList_GetItem不会增加 已返回项目的引用计数。“ 但当我测试元素的引用计数时,它增加了 >>> a = 'abc' >>> sys.getrefcount(a) 3 >>> ls = [1,2] >>> ls.append(a) >&

我读到这一行:

“PyList_SetItem不会增加新项目的引用 计数,但会减少其替换项的引用计数, 如果不是nil,则会减少引用计数(如果不是) 插入列表中。类似地,PyList_GetItem不会增加 已返回项目的引用计数。“

但当我测试元素的引用计数时,它增加了

>>> 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)