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

PyObject* `_PyObject_New`(PyTypeObject *type)
  Return value: New reference.

PyVarObject* `_PyObject_NewVar`(PyTypeObject *type, Py_ssize_t size)
  Return value: New reference.

  バージョン 2.5 で変更: この関数は以前は size の型に `int` を利用していました。この変更により、 64bit システムを正しくサポートするには修正が必要になります。

void `_PyObject_Del`(PyObject *op)

PyObject* `PyObject_Init`(PyObject *op, PyTypeObject *type)
  Return value: Borrowed reference.

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

PyVarObject* `PyObject_InitVar`(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)
  Return value: Borrowed reference.

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

  バージョン 2.5 で変更: この関数は以前は size の型に `int` を利用していました。この変更により、 64bit システムを正しくサポートするには修正が必要になります。

TYPE* `PyObject_New`(TYPE, PyTypeObject *type)
  Return value: New reference.

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

TYPE* `PyObject_NewVar`(TYPE, PyTypeObject *type, Py_ssize_t size)
  Return value: New reference.

  C 構造体型 TYPE と Python 型オブジェクト type を使って新しい Python オブジェクトをメモリ上に確保します。 Python オブジェクトヘッダで定義されていないフィールドは初期化されません。確保されたメモリは、 TYPE 構造体に加え、type の `tp_itemsize` フィールドで指定されているサイズを size 個分の大きさを格納できます。この関数は、例えばタプルのように生成時にサイズを決定できるオブジェクトを実装する際に便利です。一連の複数のフィールドのメモリ割り当てを一度で行うことでアロケーション回数を減らし、メモリ管理の効率が向上します。

  バージョン 2.5 で変更: この関数は以前は size の型に `int` を利用していました。この変更により、 64bit システムを正しくサポートするには修正が必要になります。

void `PyObject_Del`(PyObject *op)

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

PyObject* `Py_InitModule`(char *name, PyMethodDef *methods)
  Return value: Borrowed reference.

  name と関数のテーブルに基づいて新たなモジュールオブジェクトを生成し、生成されたモジュールオブジェクトを返します。

  バージョン 2.3 で変更: 以前のバージョンの Python では、 methods 引数の値として NULL をサポートしていませんでした.

PyObject* `Py_InitModule3`(char *name, PyMethodDef *methods, char *doc)
  Return value: Borrowed reference.

  name と関数のテーブルに基づいて新たなモジュールオブジェクトを生成し、生成されたモジュールオブジェクトを返します。 doc が NULL でない場合、モジュールの docstring として使われます。

  バージョン 2.3 で変更: 以前のバージョンの Python では、 methods 引数の値として NULL をサポートしていませんでした.

PyObject* `Py_InitModule4`(char *name, PyMethodDef *methods, char *doc, PyObject *self, int apiver)
  Return value: Borrowed reference.

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

  注釈

  この関数のほとんどの用途は、代わりに `Py_InitModule3()` を使えるはずです; 本当にこの関数の必要性を理解しているときにだけ利用してください。

  バージョン 2.3 で変更: 以前のバージョンの Python では、 methods 引数の値として NULL をサポートしていませんでした.

PyObject `_Py_NoneStruct`

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