在堆上分配對(duì)象?
-
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)初始化新分配對(duì)象 op。返回已初始化對(duì)象。如果 type 表明該對(duì)象參與循環(huán)垃圾檢測(cè)器,則將其添加到檢測(cè)器的觀察對(duì)象集中。 對(duì)象的其他字段不受影響。
-
PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)?
- Return value: Borrowed reference. Part of the Stable ABI.
它的功能和
PyObject_Init()
一樣,并且會(huì)初始化變量大小對(duì)象的長(zhǎng)度信息。
-
TYPE *PyObject_New(TYPE, PyTypeObject *type)?
- Return value: New reference.
使用 C 結(jié)構(gòu)類型 TYPE 和 Python 類型對(duì)象 type 分配一個(gè)新的 Python 對(duì)象。 未在該 Python 對(duì)象標(biāo)頭中定義的字段不會(huì)被初始化;對(duì)象的引用計(jì)數(shù)將為一。 內(nèi)存分配大小由 type 對(duì)象的
tp_basicsize
字段來(lái)確定。
-
TYPE *PyObject_NewVar(TYPE, PyTypeObject *type, Py_ssize_t size)?
- Return value: New reference.
使用C的數(shù)據(jù)結(jié)構(gòu)類型 TYPE 和Python的類型對(duì)象 type 分配一個(gè)新的Python對(duì)象。Python對(duì)象頭文件中沒(méi)有定義的字段不會(huì)被初始化。被分配的內(nèi)存空間預(yù)留了 TYPE 結(jié)構(gòu)加 type 對(duì)象中
tp_itemsize
字段提供的 size 字段的值。這對(duì)于實(shí)現(xiàn)類似元組這種能夠在構(gòu)造期決定自己大小的對(duì)象是很實(shí)用的。將字段的數(shù)組嵌入到相同的內(nèi)存分配中可以減少內(nèi)存分配的次數(shù),這提高了內(nèi)存分配的效率。
-
void PyObject_Del(void *op)?
釋放由
PyObject_New()
或者PyObject_NewVar()
分配內(nèi)存的對(duì)象。這通常由對(duì)象的type字段定義的tp_dealloc
處理函數(shù)來(lái)調(diào)用。調(diào)用這個(gè)函數(shù)以后op對(duì)象中的字段都不可以被訪問(wèn),因?yàn)樵峙涞膬?nèi)存空間已不再是一個(gè)有效的Python對(duì)象。
-
PyObject _Py_NoneStruct?
這個(gè)對(duì)象是像
None
一樣的 Python 對(duì)象。它可以使用Py_None
宏訪問(wèn),該宏的拿到指向該對(duì)象的指針。
參見(jiàn)
PyModule_Create()
分配內(nèi)存和創(chuàng)建擴(kuò)展模塊