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

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

void Py_INCREF(PyObject *o)

   Indicate taking a new *strong reference* to object *o*, indicating
   it is in use and should not be destroyed.

   This function is usually used to convert a *borrowed reference* to
   a *strong reference* in-place. The "Py_NewRef()" function can be
   used to create a new *strong reference*.

   When done using the object, release it by calling "Py_DECREF()".

   オブジェクトが "NULL" であってはいけません。それが "NULL" ではない
   と確信が持てないならば、 "Py_XINCREF()" を使ってください。

   Do not expect this function to actually modify *o* in any way.

void Py_XINCREF(PyObject *o)

   Similar to "Py_INCREF()", but the object *o* can be "NULL", in
   which case this has no effect.

   See also "Py_XNewRef()".

PyObject *Py_NewRef(PyObject *o)
    * Part of the Stable ABI since version 3.10.*

   Create a new *strong reference* to an object: call "Py_INCREF()" on
   *o* and return the object *o*.

   When the *strong reference* is no longer needed, "Py_DECREF()"
   should be called on it to release the reference.

   The object *o* must not be "NULL"; use "Py_XNewRef()" if *o* can be
   "NULL".

   例えば:

      Py_INCREF(obj);
      self->attr = obj;

   can be written as:

      self->attr = Py_NewRef(obj);

   See also "Py_INCREF()".

   バージョン 3.10 で追加.

PyObject *Py_XNewRef(PyObject *o)
    * Part of the Stable ABI since version 3.10.*

   Similar to "Py_NewRef()", but the object *o* can be NULL.

   If the object *o* is "NULL", the function just returns "NULL".

   バージョン 3.10 で追加.

void Py_DECREF(PyObject *o)

   Release a *strong reference* to object *o*, indicating the
   reference is no longer used.

   Once the last *strong reference* is released (i.e. the object's
   reference count reaches 0), the object's type's deallocation
   function (which must not be "NULL") is invoked.

   This function is usually used to delete a *strong reference* before
   exiting its scope.

   オブジェクトが "NULL" であってはいけません。それが "NULL" ではない
   と確信が持てないならば、 "Py_XDECREF()" を使ってください。

   Do not expect this function to actually modify *o* in any way.

   警告:

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

void Py_XDECREF(PyObject *o)

   Similar to "Py_DECREF()", but the object *o* can be "NULL", in
   which case this has no effect. The same warning from "Py_DECREF()"
   applies here as well.

void Py_CLEAR(PyObject *o)

   Release a *strong reference* 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 releasing
   the reference.

   It is a good idea to use this macro whenever releasing a reference
   to an object that might be traversed during garbage collection.

void Py_IncRef(PyObject *o)
    * Part of the Stable ABI.*

   Indicate taking a new *strong reference* to object *o*. A function
   version of "Py_XINCREF()". It can be used for runtime dynamic
   embedding of Python.

void Py_DecRef(PyObject *o)
    * Part of the Stable ABI.*

   Release a *strong reference* to object *o*. A function version of
   "Py_XDECREF()". It can be used for runtime dynamic embedding of
   Python.

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