ハロー、
Pythonの参照カウントを理解するのに苦労しています。私がやりたいことは、ctypes モジュールを使用して c++ から python にタプルを返すことです。
C++:
PyObject* foo(...)
{
...
return Py_BuildValue("(s, s)", value1, value2);
}
パイソン:
pointer = c_foo(...) # c_foo loaded with ctypes
obj = cast(pointer, py_object).value
obj の ref カウントがよくわからなかったので、試しsys.getrefcount()
てみたところ3
. そうあるべきだと思います2
(getrefcount
関数は1つの参照自体を作成します)。
Py_DECREF()
オブジェクトが削除されるため、C ++で戻る前に作成できなくなりました。Pythonで参照カウントを減らすことはできますか?
編集 キャスト関数が呼び出されると、ref カウントはどうなりますか? 以下のドキュメントからはよくわかりません。http://docs.python.org/library/ctypes.html#ctypes.cast
ctypes.cast(obj, type) この関数は、C のキャスト演算子に似ています。obj と同じメモリ ブロックを指す type の新しいインスタンスを返します。type はポインター型でなければならず、obj はポインターとして解釈できるオブジェクトでなければなりません。