参照カウント
************

この節のマクロは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()" と同じです。 また、注意すべき
   ことも同じです。

void Py_CLEAR(PyObject *o)

   *o* の参照カウントを減らします。 オブジェクトは "NULL" でもよく、そ
   の場合このマクロは何も行いません。 オブジェクトが "NULL" でなければ
   、引数を "NULL" にした "Py_DECREF()" と同じ効果をもたらします。 こ
   のマクロは一時変数を使って、参照カウントをデクリメントする前に引数
   を "NULL" にセットしてくれるので、 "Py_DECREF()" に使うときの警告を
   気にしなくてすみます。

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

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

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