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

PyObject *_PyObject_New(PyTypeObject *type)
Return value: New reference.
PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)
Return value: New reference.
PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)
Return value: Borrowed reference. Part of the Stable ABI.

Initialize a newly allocated object op with its type and initial reference. Returns the initialized object. If type indicates that the object participates in the cyclic garbage detector, it is added to the detector's set of observed objects. Other fields of the object are not affected.

PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)
Return value: Borrowed reference. Part of the Stable ABI.

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

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 構造体に加え、typetp_itemsize フィールドで指定されているサイズを size 個分の大きさを格納できます。この関数は、例えばタプルのように生成時にサイズを決定できるオブジェクトを実装する際に便利です。一連の複数のフィールドのメモリ割り当てを一度で行うことでアロケーション回数を減らし、メモリ管理の効率が向上します。

void PyObject_Del(void *op)

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

PyObject _Py_NoneStruct

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

参考

PyModule_Create()

拡張モジュールのアロケートと生成。