Здравствуйте,
У меня проблемы с пониманием счетчика ссылок Python. Я хочу вернуть кортеж из c ++ в python с помощью модуля ctypes.
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
сами создают одну ссылку).
Теперь я не могу сделать Py_DECREF ()
до возврата в C ++, потому что объект удаляется. Могу ли я уменьшить количество ссылок в Python?
edit Что происходит со счетчиком ссылок при вызове функции приведения? Я не совсем уверен в документации ниже. http://docs.python.org/library/ctypes.html#ctypes.cast
ctypes.cast (объект, тип) Эта функция похожа на оператор приведения в C. Она возвращает новый экземпляр типа, который указывает на тот же блок памяти, что и obj. type должен быть типом указателя, а obj должен быть объектом, который можно интерпретировать как указатель.