ヒープへのオブジェクトの割り当て—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/2.7/c-api/allocation
移動先:案内検索

ヒープへのオブジェクトの割り当て

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 構造と typetp_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)

関数の名前とテーブルに基づいて新しいモジュールオブジェクトを作成し、新しいモジュールオブジェクトを返します。 docNULL 以外の場合、モジュールのdocstringを定義するために使用されます。

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

PyObject *Py_InitModule4(char *name, PyMethodDef *methods, char *doc, PyObject *self, int apiver)

関数の名前とテーブルに基づいて新しいモジュールオブジェクトを作成し、新しいモジュールオブジェクトを返します。 docNULL 以外の場合、モジュールのdocstringを定義するために使用されます。 selfNULL 以外の場合、(それ以外の場合は NULL )最初のパラメーターとしてモジュールの関数に渡されます。 (これは実験的な機能として追加されたものであり、現在のバージョンのPythonでは既知の使用法はありません。) apiver の場合、渡される必要がある唯一の値は定数PYTHON_API_VERSIONによって定義されます。 。

ノート

この関数のほとんどの使用法は、おそらく代わりに Py_InitModule3()を使用する必要があります。 必要であると確信できる場合にのみ、これを使用してください。

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

PyObject _Py_NoneStruct
PythonでNoneとして表示されるオブジェクト。 これには、このオブジェクトへのポインタを評価するPy_Noneマクロを使用してのみアクセスする必要があります。