ヒープへのオブジェクトの割り当て
- PyObject *_PyObject_New(PyTypeObject *type)
- PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)
- PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)
- 新しく割り当てられたオブジェクト op をそのタイプと初期参照で初期化します。 初期化されたオブジェクトを返します。 type が、オブジェクトが循環ガベージ検出器に参加していることを示している場合、そのオブジェクトは検出器の監視対象オブジェクトのセットに追加されます。 オブジェクトの他のフィールドは影響を受けません。
- PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)
- これにより、 PyObject_Init()が実行するすべての処理が実行され、可変サイズのオブジェクトの長さ情報も初期化されます。
- TYPE *PyObject_New(TYPE, PyTypeObject *type)
- C構造体タイプ TYPE とPythonタイプオブジェクト type を使用して新しいPythonオブジェクトを割り当てます。 Pythonオブジェクトヘッダーで定義されていないフィールドは初期化されません。 オブジェクトの参照カウントは1になります。 メモリ割り当てのサイズは、タイプオブジェクトの tp_basicsize フィールドから決定されます。
- TYPE *PyObject_NewVar(TYPE, PyTypeObject *type, Py_ssize_t size)
- C構造体タイプ TYPE とPythonタイプオブジェクト type を使用して新しいPythonオブジェクトを割り当てます。 Pythonオブジェクトヘッダーで定義されていないフィールドは初期化されません。 割り当てられたメモリは、 TYPE 構造と type の tp_itemsize フィールドで指定されたサイズの size フィールドを許可します。 これは、構築時にサイズを決定できるタプルなどのオブジェクトを実装する場合に役立ちます。 フィールドの配列を同じ割り当てに埋め込むと、割り当ての数が減り、メモリ管理の効率が向上します。
- void PyObject_Del(void *op)
- PyObject_New()または PyObject_NewVar()を使用してオブジェクトに割り当てられたメモリを解放します。 これは通常、オブジェクトのタイプで指定された tp_dealloc ハンドラーから呼び出されます。 メモリは有効なPythonオブジェクトではなくなったため、この呼び出しの後にオブジェクトのフィールドにアクセスしないでください。
- PyObject _Py_NoneStruct
- Pythonで
None
として表示されるオブジェクト。 これには、このオブジェクトへのポインターを評価する Py_None マクロを使用してのみアクセスする必要があります。