为什么Pythons PyObject_CallMethod将列表参数的引用计数增加4?

时间:2012-02-23 17:06:04

标签: python python-c-extension

我对Python相对缺乏经验。我必须修复遗留软件中的错误并陷入困境。我们使用的是Python 2.6.6。

问题如下:

C ++中有一个调用如下:

PyObject_CallMethod( obj, "updateCallback", "(O)", list );

和Python代码中的(简化)updateCallback如下所示:

def updateCallback(self, args):        
    print sys.getrefcount( args )

list是PyObject *,在CallMethod之前它的引用计数是1.在使用PyObject_CallMethod调用updateCallback之后,Python代码中的print语句打印5.当PyObject_CallMethod返回时,我在调试器中看到“list” (对应于updateCalback中的args的AFAIK)仍然引用5。

现在,我明白使用(O)会将引用计数增加1,但为什么在我的情况下呢?

提前致谢

0 个答案:

没有答案