3. 参照カウント

この節のマクロはPythonオブジェクトの参照カウントを管理するために使われます。

void Py_INCREF(PyObject *o)
オブジェクトoに対する参照カウントを一つ増やします。オブジェクトが NULLであってはいけません。それがNULLではないと確信が持てないならば、 Py_XINCREF()を使ってください。

void Py_XINCREF(PyObject *o)
オブジェクトoに対する参照カウントを一つ増やします。オブジェクトが NULLであってもよく、その場合マクロは何の影響も与えません。

void Py_DECREF(PyObject *o)
オブジェクトoに対する参照カウントを一つ減らします。オブジェクトが NULLであってはいけません。それがNULLではないと確信が持てないならば、 Py_XDECREF()を使ってください。参照カウントがゼロになったら、 オブジェクトの型のメモリ解放関数(NULLであってはならない)が呼ばれます。

警告: (例えば__del__()メソッドをもつクラスインスタンスが メモリ解放されたときに)メモリ解放関数は任意のPythonコードを呼び出すことが できます。このようなコードでは例外は伝播しませんが、実行されたコードは すべてのPythonグローバル変数に自由にアクセスできます。 これが意味するのは、Py_DECREF()が呼び出されるより前では、 グローバル変数から到達可能などんなオブジェクトも一貫した状態に あるべきであるということです。 例えば、リストからオブジェクトを削除するコードは削除するオブジェクト への参照を一時変数にコピーし、リストデータ構造を更新し、それから 一時変数に対してPy_DECREF()を呼び出すべきです。

void Py_XDECREF(PyObject *o)
オブジェクトoへの参照カウントを一つ減らします。オブジェクトは NULLであってもよいが、その場合マクロは何の影響も与えません。それ以外の 場合、結果はPy_DECREF()と同じです。また、注意すべきことも 同じです。

以下の関数やマクロはインタプリタのコアの内部においてのみ使用するための ものです: _Py_Dealloc(), _Py_ForgetReference(), _Py_NewReference()。また、グローバル変数_Py_RefTotal も同様です。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。