#
10.1 オブジェクトをヒープ上にメモリ確保する

PyObject* `_PyObject_New`( | PyTypeObject *type)

  戻り値: 新たな参照.

PyVarObject* `_PyObject_NewVar`( | PyTypeObject *type, int size)

  戻り値: 新たな参照.

void `_PyObject_Del`( | PyObject *op)

PyObject* `PyObject_Init`( | PyObject *op, PyTypeObject *type)

  戻り値: 借りた参照.
  新たにメモリ確保されたオブジェクト op に対し、型と初期状態での 参照 (initial reference) を初期化します。 初期化されたオブジェクトを返します。type からそのオブジェクトが 循環参照ガベージ検出の機能を有する場合、検出機構が監視対象とする オブジェクトのセットに追加されます。 オブジェクトの他のフィールドには影響を及ぼしません。

PyVarObject* `PyObject_InitVar`( | PyVarObject *op, PyTypeObject *type, int size)

  `PyObject_Init()` の全ての処理を行い、可変サイズオブジェクト の場合には長さ情報も初期化します。

TYPE* `PyObject_New`( | TYPE, PyTypeObject *type)

  戻り値: 新たな参照.
  C 構造体型 TYPE と Python 型オブジェクト type を使って 新たな Python オブジェクトをメモリ確保します。 Python オブジェクトヘッダで定義されていないフィールドは初期化されません; オブジェクトの参照カウントは 1 になります。メモリ確保のサイズは 型オブジェクトの `tp_basicsize` で決定します。

TYPE* `PyObject_NewVar`( | TYPE, PyTypeObject *type, int size)

  戻り値: 新たな参照.
  C 構造体型 TYPE と Python 型オブジェクト type を使って 新たな Python オブジェクトをメモリ確保します。 Python オブジェクトヘッダで定義されていないフィールドは初期化されません。 確保されたメモリは、TYPE 構造体に加え、vartype の `tp_itemsize` フィールドで指定されているサイズ中の size フィールドを 収容できます。この関数は、例えばタプルのように生成時にサイズを決定 できるオブジェクトを実装する際に便利です。一連の複数のフィールドに 対するアロケーション操作を一つにして埋め込むと、アロケーション回数 が減り、メモリ管理の処理効率が向上します。

void `PyObject_Del`( | PyObject *op)

  `PyObject_New()` や `PyObject_NewVar()` で 確保されたメモリを解放します。この関数は、通常オブジェクトの型に 指定されている `tp_dealloc` ハンドラ内で呼び出します。 この関数を呼び出した後では、オブジェクトのメモリ領域はもはや有効な Python オブジェクトを表現してはいないので、オブジェクトのフィールド に対してアクセスしてはなりません。

TYPE* `PyObject_NEW`( | TYPE, PyTypeObject *type)

  戻り値: 新たな参照.
  安全性と引き換えにパフォーマンスを高めるための`PyObject_New()` のマクロ版です。 type が `NULL` かどうかチェックしません。

TYPE* `PyObject_NEW_VAR`( | TYPE, PyTypeObject *type, int size)

  戻り値: 新たな参照.
  安全性と引き換えにパフォーマンスを高めるための`PyObject_NewVar()` のマクロ版です。 type が `NULL` かどうかチェックしません。

void `PyObject_DEL`( | PyObject *op)

  `PyObject_Del()`のマクロ版です。

PyObject* `Py_InitModule`( | char *name, PyMethodDef *methods)

  戻り値: 借りた参照.
  name と関数のテーブルに基づいて新たなモジュールオブジェクトを 生成し、生成されたモジュールオブジェクトを返します。 バージョン2.3 以降で変更された 仕様: 以前のバージョンの Python では、methods 引数の 値として`NULL` をサポートしていませんでした

PyObject* `Py_InitModule3`( | char *name, PyMethodDef *methods, char *doc)

  戻り値: 借りた参照.
  name と関数のテーブルに基づいて新たなモジュールオブジェクトを 生成し、生成されたモジュールオブジェクトを返します。 doc が `NULL`でない場合、モジュールの docstring として 使われます。 バージョン2.3 以降で変更された 仕様: 以前のバージョンの Python では、methods 引数の 値として`NULL` をサポートしていませんでした

PyObject* `Py_InitModule4`( | char *name, PyMethodDef *methods, char *doc, PyObject *self, int apiver)

  戻り値: 借りた参照.
  name と関数のテーブルに基づいて新たなモジュールオブジェクトを 生成し、生成されたモジュールオブジェクトを返します。 doc が `NULL`でない場合、モジュールの docstring として 使われます。self が`NULL`でない場合、モジュール内の各関数 の第一引数として渡されます (`NULL`の時には第一引数も `NULL`になります)。 (この関数は実験的な機能のために追加されたもので、現在の Python の バージョンで使われてはいないはずです。) apiver に渡してよい値は、 `PYTHON_API_VERSION` で定義されている定数だけです。

  注意: この関数のほとんどの用途は、代わりに`Py_InitModule3()` を使えるはずです; 本当にこの関数を使いたいときにだけ利用してください バージョン2.3 以降で変更された 仕様: 以前のバージョンの Python では、methods 引数の 値として`NULL` をサポートしていませんでした

DL_IMPORT

PyObject `_Py_NoneStruct`
  Python からは `None` に見えるオブジェクトです。この値への アクセスは、このオブジェクトへのポインタを評価する`Py_None` マクロを使わねばなりません。