Счетчик ссылок Python и ctypes

Здравствуйте,

У меня проблемы с пониманием счетчика ссылок 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 должен быть объектом, который можно интерпретировать как указатель.

5
задан tauran 17 October 2010 в 18:26
поделиться