ヒープ上でのオブジェクトの割り当て¶
-
PyObject *_PyObject_New(PyTypeObject *type)¶
- 戻り値: 新しい参照。
-
PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)¶
- 戻り値: 新しい参照。
-
PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)¶
- 戻り値: 借用参照。 次に属します: Stable ABI.
新しく割り当てたオブジェクト op の型と初期の参照を設定し、初期化したオブジェクトを返します。 オブジェクトの他のフィールドは初期化しません。 名前に反して、この関数はオブジェクトの
__init__()メソッド (tp_initスロット) とは無関係です。 特に、この関数はオブジェクトの__init__()メソッドを呼び出し ません。一般に、この関数は低レベルのルーチンとして扱ってください。 可能な場合は
tp_allocを使ってください。 自分の型のtp_allocを実装する場合は、PyType_GenericAlloc()またはPyObject_New()を優先してください。注釈
この関数が初期化するのは、オブジェクトのメモリのうち先頭の
PyObject構造体に対応する部分だけです。 残りの部分をゼロで埋めることはありません。
-
PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)¶
- 戻り値: 借用参照。 次に属します: Stable ABI.
PyObject_Init()の全ての処理を行い、可変サイズオブジェクトの場合には長さ情報も初期化します。注釈
この関数が初期化するのは、オブジェクトのメモリの一部だけです。 残りの部分をゼロで埋めることはありません。
-
PyObject_New(TYPE, typeobj)¶
C の構造体型 TYPE と Python の型オブジェクト typeobj (
PyTypeObject*) を使って、新しい Python オブジェクトを割り当てます。PyObject_Malloc()を呼び出してメモリを割り当て、PyObject_Init()と同じように初期化します。 呼び出し側がオブジェクトへの唯一の参照を所有します (つまり参照カウントは 1 になります)。オブジェクトのメモリを割り当てるためにこれを直接呼び出すのは避け、代わりに型の
tp_allocスロットを呼び出してください。型の
tp_allocスロットには、このマクロを呼び出すだけの独自の関数よりもPyType_GenericAlloc()を設定することが推奨されます。このマクロは
tp_alloc、tp_new(__new__())、tp_init(__init__()) を呼び出しません。tp_flagsにPy_TPFLAGS_HAVE_GCが設定されたオブジェクトには使えません。 代わりにPyObject_GC_Newを使ってください。このマクロで割り当てたメモリは
PyObject_Free()で解放しなければなりません (通常はオブジェクトのtp_freeスロットを介して呼び出します)。注釈
返されるメモリが初期化前にすべてゼロで埋められているとは限りません。
注釈
このマクロは指定された型の完全に初期化されたオブジェクトを構築するものではありません。 メモリを割り当て、
tp_initによるさらなる初期化の準備をするだけです。 完全に初期化されたオブジェクトを構築するには、代わりに typeobj を呼び出してください。 例えば次のようにします。PyObject *foo = PyObject_CallNoArgs((PyObject *)&PyFoo_Type);
-
PyObject_NewVar(TYPE, typeobj, size)¶
PyObject_Newと同じですが、次の点が異なります。TYPE 構造体に加え、typeobj の
tp_itemsizeフィールドが指定するサイズのフィールド size 個分 (Py_ssize_t) のメモリを割り当てます。メモリは
PyObject_InitVar()と同じように初期化されます。
これはタプルのように構築時にサイズを決定できるオブジェクトの実装に役立ちます。 フィールドの配列を同じ割り当て領域に埋め込むことで、割り当て回数を減らし、メモリ管理の効率を高められます。
オブジェクトのメモリを割り当てるためにこれを直接呼び出すのは避け、代わりに型の
tp_allocスロットを呼び出してください。型の
tp_allocスロットには、このマクロを呼び出すだけの独自の関数よりもPyType_GenericAlloc()を設定することが推奨されます。tp_flagsにPy_TPFLAGS_HAVE_GCが設定されたオブジェクトには使えません。 代わりにPyObject_GC_NewVarを使ってください。この関数で割り当てたメモリは
PyObject_Free()で解放しなければなりません (通常はオブジェクトのtp_freeスロットを介して呼び出します)。注釈
返されるメモリが初期化前にすべてゼロで埋められているとは限りません。
注釈
このマクロは指定された型の完全に初期化されたオブジェクトを構築するものではありません。 メモリを割り当て、
tp_initによるさらなる初期化の準備をするだけです。 完全に初期化されたオブジェクトを構築するには、代わりに typeobj を呼び出してください。 例えば次のようにします。PyObject *list_instance = PyObject_CallNoArgs((PyObject *)&PyList_Type);
-
PyObject _Py_NoneStruct¶
Python からは
Noneに見えるオブジェクトです。この値へのアクセスは、このオブジェクトへのポインタを評価するPy_Noneマクロを使わなければなりません。
参考
- モジュールオブジェクト (module object)
拡張モジュールのアロケートと生成。
緩やかに非推奨となった別名¶
バージョン 3.15 で ソフト非推奨 <Soft deprecated>.
これらは既存の関数やマクロの別名です。 後方互換性のためだけに残されています。
緩やかに非推奨となった別名 |
関数 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|