让我们假设您为python写了一个C ++(或C)扩展,名为module
。它返回一个数组数组。返回的数组及其数组应该作为引用计数?
python代码类似于
import my_module
from sys import getrefcount as g # will use to check reference count
def use_module():
x = my_module.func()
print 'x =', x
print 'g(x) =', g(x)
print 'g(x[0]) =', g(x[0])
test = 'some random thing'
print 'should be', g(test), '?'
use_module()
>>> x = ( (1,2,3,4) , [2,3] , {'one':1} )
>>> g(x) = 3
>>> g(x[0]) = 3
>>> should be 2 ?
我希望g(x)
为2
,而不是3
。 (在g
添加一个以引用x
)
在我的C ++扩展中,我确保数组及其所有子集合及其元素在返回python之前的引用计数为1
,所以我不确定它是如何引起攻击的3
这么快?也许返回的PyObject*
应该有0
作为引用计数?
答案 0 :(得分:0)
如果不存在对返回对象的其他引用,则refcount应为1.如果refcount为0,则对象将被取消分配。