在堆上分配对象¶
-
PyObject *_PyObject_New(PyTypeObject *type)¶
- 返回值:新引用。
-
PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)¶
- 返回值:新引用。
-
PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)¶
- 返回值: 借用引用。 稳定ABI 的一部分。
使用其类型和初始引用初始化新分配的对象 op。返回已初始化的对象。对象的其他字段未初始化。尽管其名称如此,此函数与对象的
__init__()方法 (tp_init槽) 无关。具体来说,此函数不会调用对象的__init__()方法。通常,此函数被视为低级例程。在可能的情况下使用
tp_alloc。对于为您的类型实现tp_alloc,首选PyType_GenericAlloc()或PyObject_New()。备注
此函数仅初始化对象内存中与初始
PyObject结构相对应的部分。它不会将其余部分清零。
-
PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)¶
- 返回值: 借用引用。 稳定ABI 的一部分。
此函数执行
PyObject_Init()所做的一切,并且还为可变大小对象初始化长度信息。备注
此函数仅初始化对象内存的一部分。它不会将其余部分清零。
-
PyObject_New(TYPE, typeobj)¶
通过调用
PyObject_Malloc()分配内存并像PyObject_Init()那样初始化,使用 C 结构类型 TYPE 和 Python 类型对象 typeobj (PyTypeObject*) 分配一个新的 Python 对象。调用者将拥有对该对象的唯一引用(即其引用计数将为一)。避免直接调用此宏来为对象分配内存;请改为调用类型的
tp_alloc槽。在填充类型的
tp_alloc槽时,PyType_GenericAlloc()优于仅仅调用此宏的自定义函数。此宏不调用
tp_alloc、tp_new(__new__()) 或tp_init(__init__())。此宏不能用于
tp_flags中设置了Py_TPFLAGS_HAVE_GC的对象;请改为使用PyObject_GC_New。通过此宏分配的内存必须使用
PyObject_Free()释放(通常通过对象的tp_free槽调用)。备注
不保证返回的内存已被完全清零,然后才被初始化。
备注
此宏不构造给定类型的完全初始化对象;它仅仅分配内存并准备它以便
tp_init进一步初始化。要构造一个完全初始化的对象,请改为调用 typeobj。例如PyObject *foo = PyObject_CallNoArgs((PyObject *)&PyFoo_Type);
-
PyObject_NewVar(TYPE, typeobj, size)¶
与
PyObject_New类似,除了它为 TYPE 结构分配足够的内存,再加上 typeobj 的
tp_itemsize字段给出的大小所表示的 size (Py_ssize_t) 字段。内存像
PyObject_InitVar()那样初始化。
这对于实现像元组这样的对象很有用,这些对象能够在构造时确定其大小。将字段数组嵌入到同一分配中减少了分配次数,从而提高了内存管理效率。
避免直接调用此宏来为对象分配内存;请改为调用类型的
tp_alloc槽。在填充类型的
tp_alloc槽时,PyType_GenericAlloc()优于仅仅调用此宏的自定义函数。此宏不能用于
tp_flags中设置了Py_TPFLAGS_HAVE_GC的对象;请改为使用PyObject_GC_NewVar。通过此函数分配的内存必须使用
PyObject_Free()释放(通常通过对象的tp_free槽调用)。备注
不保证返回的内存已被完全清零,然后才被初始化。
备注
此宏不构造给定类型的完全初始化对象;它仅仅分配内存并准备它以便
tp_init进一步初始化。要构造一个完全初始化的对象,请改为调用 typeobj。例如PyObject *list_instance = PyObject_CallNoArgs((PyObject *)&PyList_Type);
-
void PyObject_Del(void *op)¶
与
PyObject_Free()相同。
参见
- 模块对象
用于分配和创建扩展模块。