#
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` も同様です。