在堆上分配对象

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 对象。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_NewPyObject_NewVar 分配给对象的内存。这通常从对象类型中指定的 tp_dealloc 处理程序调用。在此调用之后,不应访问对象的字段,因为内存不再是有效的 Python 对象。

PyObject _Py_NoneStruct

在 Python 中可见为 None 的对象。这应该只使用 Py_None 宏访问,该宏计算为指向此对象的指针。

另请参阅

PyModule_Create()

用于分配和创建扩展模块。