在堆上分配对象

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结构类型分配新的python对象 TYPE 以及python类型的对象 type . 未由python对象头定义的字段未初始化;对象的引用计数将为1。内存分配的大小由 tp_basicsize 类型对象的字段。

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

使用C结构类型分配新的python对象 TYPE 以及python类型的对象 type . 未由python对象头定义的字段未初始化。分配的内存允许 TYPE 结构加 size 字段的大小由 tp_itemsize 领域 type . 这对于实现像元组这样的对象很有用,因为元组能够在构建时确定它们的大小。将字段数组嵌入到同一个分配中可以减少分配的数量,从而提高内存管理效率。

void PyObject_Del(void *op)

释放分配给对象的内存 PyObject_New()PyObject_NewVar() . 这通常是从 tp_dealloc 对象类型中指定的处理程序。调用后不应访问对象的字段,因为内存不再是有效的Python对象。

PyObject _Py_NoneStruct

在python中可见的对象 None . 只能使用 Py_None 宏,其计算结果为指向此对象的指针。

参见

PyModule_Create()

分配和创建扩展模块。