在堆上分配物件¶
-
PyObject *_PyObject_New(PyTypeObject *type)¶
- 返回值:新的引用。
-
PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)¶
- 返回值:新的引用。
-
PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)¶
- 返回值:借用的引用。 穩定 ABI 的一部分。
使用其型別和初始引用來初始化新分配的物件 *op*。 返回初始化的物件。 物件的其他欄位不受影響。
-
PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)¶
- 返回值:借用的引用。 穩定 ABI 的一部分。
此函式執行
PyObject_Init()
的所有操作,並初始化可變大小物件的長度資訊。
-
PyObject_New(TYPE, typeobj)¶
使用 C 結構型別 *TYPE* 和 Python 型別物件 *typeobj* (
PyTypeObject*
)分配新的 Python 物件。 未由 Python 物件頭定義的欄位不會初始化。 呼叫者將擁有對物件的唯一引用(即其引用計數將為 1)。 記憶體分配的大小由型別物件的tp_basicsize
欄位確定。
-
PyObject_NewVar(TYPE, typeobj, size)¶
使用 C 結構型別 *TYPE* 和 Python 型別物件 *typeobj*(
PyTypeObject*
)分配新的 Python 物件。 未由 Python 物件頭定義的欄位不會初始化。 分配的記憶體允許 *TYPE* 結構加上 *size* (Py_ssize_t
) 欄位,該欄位的大小由 *typeobj* 的tp_itemsize
欄位給出。 這對於實現諸如元組之類的物件很有用,元組能夠在構造時確定其大小。 將欄位陣列嵌入到同一分配中會減少分配次數,從而提高記憶體管理效率。
-
void PyObject_Del(void *op)¶
使用
PyObject_New
或PyObject_NewVar
釋放分配給物件的記憶體。 這通常從物件型別中指定的tp_dealloc
處理程式呼叫。 在此呼叫之後不應訪問物件的欄位,因為該記憶體不再是有效的 Python 物件。
另請參閱
PyModule_Create()
用於分配和建立擴充套件模組。