在堆上分配对象¶
-
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 对象。 未由 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_New
或PyObject_NewVar
释放分配给对象的内存。 这通常从对象类型中指定的tp_dealloc
处理程序调用。 在此调用之后不应访问对象的字段,因为该内存不再是有效的 Python 对象。
另请参阅
PyModule_Create()
用于分配和创建扩展模块。