在堆上分配對象?

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. Part of the Stable ABI.

用它的類(lèi)型和初始引用來(lái)初始化新分配對象 op。返回已初始化對象。如果 type 表明該對象參與循環(huán)垃圾檢測器,則將其添加到檢測器的觀(guān)察對象集中。 對象的其他字段不受影響。

PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)?
Return value: Borrowed reference. Part of the Stable ABI.

它的功能和 PyObject_Init() 一樣,并且會(huì )初始化變量大小對象的長(cháng)度信息。

TYPE *PyObject_New(TYPE, PyTypeObject *type)?
Return value: New reference.

使用 C 結構類(lèi)型 TYPE 和 Python 類(lèi)型對象 type 分配一個(gè)新的 Python 對象。 未在該 Python 對象標頭中定義的字段不會(huì )被初始化;對象的引用計數將為一。 內存分配大小由 type 對象的 tp_basicsize 字段來(lái)確定。

TYPE *PyObject_NewVar(TYPE, PyTypeObject *type, Py_ssize_t size)?
Return value: New reference.

使用C的數據結構類(lèi)型 TYPE 和Python的類(lèi)型對象 type 分配一個(gè)新的Python對象。Python對象頭文件中沒(méi)有定義的字段不會(huì )被初始化。被分配的內存空間預留了 TYPE 結構加 type 對象中 tp_itemsize 字段提供的 size 字段的值。這對于實(shí)現類(lèi)似元組這種能夠在構造期決定自己大小的對象是很實(shí)用的。將字段的數組嵌入到相同的內存分配中可以減少內存分配的次數,這提高了內存分配的效率。

void PyObject_Del(void *op)?

釋放由 PyObject_New() 或者 PyObject_NewVar() 分配內存的對象。這通常由對象的type字段定義的 tp_dealloc 處理函數來(lái)調用。調用這個(gè)函數以后op對象中的字段都不可以被訪(fǎng)問(wèn),因為原分配的內存空間已不再是一個(gè)有效的Python對象。

PyObject _Py_NoneStruct?

這個(gè)對象是像 None 一樣的 Python 對象。它可以使用 Py_None 宏訪(fǎng)問(wèn),該宏的拿到指向該對象的指針。

參見(jiàn)

PyModule_Create()

分配內存和創(chuàng )建擴展模塊