在堆上分配对象

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

为新分配的对象 op 初始化它的类型和初始引用。 返回初始化后的对象。 对象的其他字段不会被影响。

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 字段决定。

请注意如果 typeobj 设置了 Py_TPFLAGS_HAVE_GC 则此函数将不适用。 对于这样的对象,请改用 PyObject_GC_New()

PyObject_NewVar(TYPE, typeobj, size)

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

请注意如果 typeobj 设置了 Py_TPFLAGS_HAVE_GC 则此函数将不适用。 对于这样的对象,请改用 PyObject_GC_NewVar()

PyObject _Py_NoneStruct

这个对象是像 None 一样的 Python 对象。它可以使用 Py_None 宏访问,该宏的拿到指向该对象的指针。

参见

模块对象

分配内存和创建扩展模块

一些已被弃用的别名

这些是现有函数和宏的已处于 soft deprecated 状态的别名。 它们的存在只是为了向下兼容。

已弃用的别名

函数

PyObject_NEW(type, typeobj)

PyObject_New

PyObject_NEW_VAR(type, typeobj, n)

PyObject_NewVar

PyObject_INIT(op, typeobj)

PyObject_Init()

PyObject_INIT_VAR(op, typeobj, n)

PyObject_InitVar()

PyObject_MALLOC(n)

PyObject_Malloc()

PyObject_REALLOC(p, n)

PyObject_Realloc()

PyObject_FREE(p)

PyObject_Free()

PyObject_DEL(p)

PyObject_Free()

PyObject_Del(p)

PyObject_Free()