在 heap 上分配物件

PyObject *_PyObject_New(PyTypeObject *type)
回傳值:新的參照。
PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)
回傳值:新的參照。
PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)
回傳值:借用參照。 属于 稳定 ABI.

用它的型別和初始參照來初始化新分配物件 op。已初始化的物件會被回傳。如果 type 表示了該物件參與迴圈垃圾檢查器,則將其新增到檢查器的觀察物件集合中。物件的其他欄位不受影響。

PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)
回傳值:借用參照。 属于 稳定 ABI.

它會做到 PyObject_Init() 的所有功能,並且會初始化一個大小可變物件的長度資訊。

PyObject_New(TYPE, typeobj)

使用 C 结构类型 TYPE 和 Python 类型对象 typeobj (PyTypeObject*) 分配一个新的 Python 对象。 f未在该 Python 对象标头中定义的字段不会被初始化。 调用方将拥有对该对象的唯一引用(即引用计数将为 1)。 内存分配的大小由类型对象的 tp_basicsize 字段决定。

PyObject_NewVar(TYPE, typeobj, size)

使用 C 结构类型 TYPE 和 Python 类型对象 typeobj (PyTypeObject*) 分配一个新的 Python 对象。 未在该 Python 对象标头中定义的字段不会被初始化。 被分配的内存允许 TYPE 结构加 typeobjtp_itemsize 字段所给出的 size (Py_ssize_t) 个字段。 这对于实现像元组这样能够在构造时确定其大小的对象来说很有用。 将字段数组嵌入到相同的内在分配中可减少内存分配的次数,这提高了内存管理效率。

void PyObject_Del(void *op)

释放使用 PyObject_NewPyObject_NewVar 分配给一个对象的内存。 这通常由在对象的类型中指定的 tp_dealloc 处理句柄来调用。 在此调用之后该对象中的字段不应再被访问因为原来的内存已不再是一个有效的 Python 对象。

PyObject _Py_NoneStruct

這個物件像是 Python 中的 None。它只應該透過 Py_None 巨集來存取,該巨集的拿到指向該物件的指標。

也參考

PyModule_Create()

分配記憶體和建立擴充模組。