参照カウント

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

void Py_INCREF(PyObject *o)

Increment the reference count for object o. The object must not be NULL; if you aren't sure that it isn't NULL, use Py_XINCREF().

void Py_XINCREF(PyObject *o)

Increment the reference count for object o. The object may be NULL, in which case the macro has no effect.

void Py_DECREF(PyObject *o)

Decrement the reference count for object o. The object must not be NULL; if you aren't sure that it isn't NULL, use Py_XDECREF(). If the reference count reaches zero, the object's type's deallocation function (which must not be NULL) is invoked.

警告

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

void Py_XDECREF(PyObject *o)

Decrement the reference count for object o. The object may be NULL, in which case the macro has no effect; otherwise the effect is the same as for Py_DECREF(), and the same warning applies.

void Py_CLEAR(PyObject *o)

Decrement the reference count for object o. The object may be NULL, in which case the macro has no effect; otherwise the effect is the same as for Py_DECREF(), except that the argument is also set to NULL. The warning for Py_DECREF() does not apply with respect to the object passed because the macro carefully uses a temporary variable and sets the argument to NULL before decrementing its reference count.

ガベージコレクション中に追跡される可能性のあるオブジェクトの参照カウントのデクリメントを行うには、このマクロを使うのがよいでしょう。

以下の関数: Py_IncRef(PyObject *o), Py_DecRef(PyObject *o), は、実行時の動的な Python 埋め込みで使われる関数です。これらの関数はそれぞれ Py_XINCREF() および Py_XDECREF() をエクスポートしただけです。

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