在Python的C / C ++扩展中,返回的PyObject *应具有哪些引用计数?

时间:2016-06-02 21:19:39

标签: python c++ c reference-counting python-c-extension

让我们假设您为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作为引用计数?

编辑:抱歉,我是个白痴。我在不知情的情况下做了另一个参考。

1 个答案:

答案 0 :(得分:0)

如果不存在对返回对象的其他引用,则refcount应为1.如果refcount为0,则对象将被取消分配。