在堆上分配對象?
-
PyObject*
_PyObject_New(PyTypeObject?*type)? - Return value: New reference.
-
PyVarObject*
_PyObject_NewVar(PyTypeObject?*type, Py_ssize_t?size)? - Return value: New reference.
-
PyObject*
PyObject_Init(PyObject?*op, PyTypeObject?*type)? - Return value: Borrowed reference.
用它的類型和初始引用來初始化新分配對象 op。返回已初始化對象。如果 type 表明該對象參與循環垃圾檢測器,則將其添加到檢測器的觀察對象集中。 對象的其他字段不受影響。
-
PyVarObject*
PyObject_InitVar(PyVarObject?*op, PyTypeObject?*type, Py_ssize_t?size)? - Return value: Borrowed reference.
它的功能和
PyObject_Init()一樣,并且會初始化變量大小對象的長度信息。
-
TYPE*
PyObject_New(TYPE, PyTypeObject?*type)? - Return value: New reference.
使用 C 結構類型 TYPE 和 Python 類型對象 type 分配一個新的 Python 對象。 未在該 Python 對象標頭中定義的字段不會被初始化;對象的引用計數將為一。 內存分配大小由 type 對象的
tp_basicsize字段來確定。
-
TYPE*
PyObject_NewVar(TYPE, PyTypeObject?*type, Py_ssize_t?size)? - Return value: New reference.
使用C的數據結構類型 TYPE 和Python的類型對象 type 分配一個新的Python對象。Python對象頭文件中沒有定義的字段不會被初始化。被分配的內存空間預留了 TYPE 結構加 type 對象中
tp_itemsize字段提供的 size 字段的值。這對于實現類似元組這種能夠在構造期決定自己大小的對象是很實用的。將字段的數組嵌入到相同的內存分配中可以減少內存分配的次數,這提高了內存分配的效率。
-
void
PyObject_Del(void?*op)? 釋放由
PyObject_New()或者PyObject_NewVar()分配內存的對象。這通常由對象的type字段定義的tp_dealloc處理函數來調用。調用這個函數以后op對象中的字段都不可以被訪問,因為原分配的內存空間已不再是一個有效的Python對象。
參見
PyModule_Create()分配內存和創建擴展模塊
