tau*_*ran 5 c python ctypes reference-counting
你好,
我有一些麻烦理解python引用计数.我想要做的是使用ctypes模块将元组从c ++返回到python.
C++:
PyObject* foo(...)
{
...
return Py_BuildValue("(s, s)", value1, value2);
}
Run Code Online (Sandbox Code Playgroud)
蟒蛇:
pointer = c_foo(...) # c_foo loaded with ctypes
obj = cast(pointer, py_object).value
Run Code Online (Sandbox Code Playgroud)
我不确定obj的引用计数,所以我试过sys.getrefcount()
了3.我认为它应该是2(getrefcount函数使一个ref本身).
现在我无法Py_DECREF()在C++中返回之前创建,因为该对象被删除了.我可以减少python中的引用计数吗?
编辑 调用强制转换函数时,引用计数会发生什么?我不太确定下面的文档.http://docs.python.org/library/ctypes.html#ctypes.cast
ctypes.cast(obj,type)此函数类似于C中的强制转换运算符.它返回一个新的类型实例,它指向与obj相同的内存块.type必须是指针类型,obj必须是可以解释为指针的对象.
在进一步的研究中,我发现可以指定函数的返回类型. http://docs.python.org/library/ctypes.html#callback-functions 这使得转换过时并且引用计数不再是问题.
clib = ctypes.cdll.LoadLibrary('some.so')
c_foo = clib.c_foo
c_foo.restype = ctypes.py_object
Run Code Online (Sandbox Code Playgroud)
由于没有给出额外的答案,我接受我的新解决方案作为答案.