ヒープへのオブジェクトの割り当て
- PyObject *_PyObject_New(PyTypeObject *type)
- PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)
バージョン2.5で変更:この関数は、サイズに
int
タイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。
- void _PyObject_Del(PyObject *op)
- PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)
- 新しく割り当てられたオブジェクト op をそのタイプと初期参照で初期化します。 初期化されたオブジェクトを返します。 type が、オブジェクトが循環ガベージ検出器に参加していることを示している場合、そのオブジェクトは検出器の監視対象オブジェクトのセットに追加されます。 オブジェクトの他のフィールドは影響を受けません。
- PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)
これにより、 PyObject_Init()が実行するすべての処理が実行され、可変サイズのオブジェクトの長さ情報も初期化されます。
バージョン2.5で変更:この関数は、サイズに
int
タイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。
- 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 フィールドを許可します。 これは、構築時にサイズを決定できるタプルなどのオブジェクトを実装する場合に役立ちます。 フィールドの配列を同じ割り当てに埋め込むと、割り当ての数が減り、メモリ管理の効率が向上します。
バージョン2.5で変更:この関数は、サイズに
int
タイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。
- void PyObject_Del(PyObject *op)
- PyObject_New()または PyObject_NewVar()を使用してオブジェクトに割り当てられたメモリを解放します。 これは通常、オブジェクトのタイプで指定された tp_dealloc ハンドラーから呼び出されます。 メモリは有効なPythonオブジェクトではなくなったため、この呼び出しの後にオブジェクトのフィールドにアクセスしないでください。
- PyObject *Py_InitModule(char *name, PyMethodDef *methods)
関数の名前とテーブルに基づいて新しいモジュールオブジェクトを作成し、新しいモジュールオブジェクトを返します。
バージョン2.3で変更:古いバージョンのPythonは、 methods 引数の値として NULL をサポートしていませんでした。
- PyObject *Py_InitModule3(char *name, PyMethodDef *methods, char *doc)
関数の名前とテーブルに基づいて新しいモジュールオブジェクトを作成し、新しいモジュールオブジェクトを返します。 doc が NULL 以外の場合、モジュールのdocstringを定義するために使用されます。
バージョン2.3で変更:古いバージョンのPythonは、 methods 引数の値として NULL をサポートしていませんでした。
- PyObject *Py_InitModule4(char *name, PyMethodDef *methods, char *doc, PyObject *self, int apiver)
関数の名前とテーブルに基づいて新しいモジュールオブジェクトを作成し、新しいモジュールオブジェクトを返します。 doc が NULL 以外の場合、モジュールのdocstringを定義するために使用されます。 self が NULL 以外の場合、(それ以外の場合は NULL )最初のパラメーターとしてモジュールの関数に渡されます。 (これは実験的な機能として追加されたものであり、現在のバージョンのPythonでは既知の使用法はありません。) apiver の場合、渡される必要がある唯一の値は定数
PYTHON_API_VERSION
によって定義されます。 。ノート
この関数のほとんどの使用法は、おそらく代わりに Py_InitModule3()を使用する必要があります。 必要であると確信できる場合にのみ、これを使用してください。
バージョン2.3で変更:古いバージョンのPythonは、 methods 引数の値として NULL をサポートしていませんでした。
- PyObject _Py_NoneStruct
- Pythonで
None
として表示されるオブジェクト。 これには、このオブジェクトへのポインタを評価するPy_None
マクロを使用してのみアクセスする必要があります。