你好,
我在理解 python 引用计数时遇到了一些麻烦。我想要做的是使用 ctypes 模块将一个元组从 c++ 返回到 python。
C++:
PyObject* foo(...)
{
...
return Py_BuildValue("(s, s)", value1, value2);
}
Python:
pointer = c_foo(...) # c_foo loaded with ctypes
obj = cast(pointer, py_object).value
我不确定 obj 的引用计数,所以我尝试sys.getrefcount()
并得到了3
. 我认为应该是2
(这些getrefcount
函数本身就是一个 ref)。
现在我不能Py_DECREF()
在 C++ 中返回,因为对象被删除了。我可以减少python中的引用计数吗?
编辑 调用 cast 函数时,引用计数会发生什么?从下面的文档中我不太确定。http://docs.python.org/library/ctypes.html#ctypes.cast
ctypes.cast(obj, type) 这个函数类似于 C 中的 cast 运算符。它返回一个新的 type 实例,该实例指向与 obj 相同的内存块。type 必须是指针类型,obj 必须是可以解释为指针的对象。