【发布时间】:2010-10-14 08:50:33
【问题描述】:
你好,
我在理解 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)。
现在我不能在 C++ 中返回之前创建Py_DECREF(),因为对象被删除了。我可以减少python中的引用计数吗?
编辑 调用 cast 函数时,引用计数会发生什么变化?从下面的文档中我不太确定。 http://docs.python.org/library/ctypes.html#ctypes.cast
ctypes.cast(obj, 类型) 此函数类似于 C 中的强制转换运算符。它返回一个新的类型实例,该实例指向与 obj 相同的内存块。 type 必须是指针类型,obj 必须是可以解释为指针的对象。
【问题讨论】:
标签: python c ctypes reference-counting