在堆上分配物件

PyObject *_PyObject_New(PyTypeObject *type)
返回值:新引用。
PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)
返回值:新引用。
PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)
返回值: 借用引用。 穩定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)
返回值: 借用引用。 穩定ABI 的一部分。

此函式執行 PyObject_Init() 所做的一切,並且還為可變大小物件初始化長度資訊。

備註

此函式僅初始化物件記憶體的一部分。它不會將其餘部分清零。

PyObject_New(TYPE, typeobj)

透過呼叫 PyObject_Malloc() 分配記憶體並像 PyObject_Init() 那樣初始化,使用 C 結構型別 TYPE 和 Python 型別物件 typeobj (PyTypeObject*) 分配一個新的 Python 物件。呼叫者將擁有對該物件的唯一引用(即其引用計數將為一)。

避免直接呼叫此宏來為物件分配記憶體;請改為呼叫型別的 tp_alloc 槽。

在填充型別的 tp_alloc 槽時,PyType_GenericAlloc() 優於僅僅呼叫此宏的自定義函式。

此宏不呼叫 tp_alloctp_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 結構分配足夠的記憶體,再加上 typeobjtp_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);
void PyObject_Del(void *op)

PyObject_Free() 相同。

PyObject _Py_NoneStruct

在 Python 中顯示為 None 的物件。這應僅使用 Py_None 宏訪問,該宏求值為指向此物件的指標。

參見

模組物件

用於分配和建立擴充套件模組。