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

この節のマクロは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" も同様です。
