Allocating Objects on the Heap

PyObject* _PyObject_New(PyTypeObject *type)
返回值:新引用。
PyVarObject* _PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)
返回值:新引用。
PyObject* PyObject_Init(PyObject *op, PyTypeObject *type)
返回值:借用引用。

使用其类型和初始引用初始化新分配的对象op返回已初始化的对象。如果类型指示对象参与循环垃圾检测器,则将其添加到检测器的观察对象集合中。对象的其他字段不受影响。

PyVarObject* PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)
返回值:借用引用。

这做的一切PyObject_Init(),并且也初始化一个可变大小的对象的长度信息。

TYPE* PyObject_New(TYPE, PyTypeObject *type)
返回值:新引用。

使用C结构类型TYPE和Python类型对象类型分配新的Python对象。未由Python对象标题定义的字段未初始化;对象的引用计数将为一。内存分配的大小由类型对象的tp_basicsize字段确定。

TYPE* PyObject_NewVar(TYPE, PyTypeObject *type, Py_ssize_t size)
返回值:新引用。

使用C结构类型TYPE和Python类型对象类型分配新的Python对象。未由Python对象标题定义的字段未初始化。分配的内存允许由类型tp_itemsize字段指定的大小的TYPE结构加上大小字段。这对于实现像元组的对象很有用,这些对象能够在构建时确定它们的大小。将字段数组嵌入到同一分配中减少了分配的数量,提高了内存管理效率。

void PyObject_Del(PyObject *op)

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

PyObject _Py_NoneStruct

在Python中作为None可见的对象。这应该只能使用Py_None宏访问,它将评估为指向此对象的指针。

也可以看看

PyModule_Create()
分配和创建扩展模块。