在 heap 上分配物件¶
- PyObject*_PyObject_New(PyTypeObject*type)¶
- 回傳值:新的參照。
- PyVarObject*_PyObject_NewVar(PyTypeObject*type,Py_ssize_tsize)¶
- 回傳值:新的參照。
- PyObject*PyObject_Init(PyObject*op,PyTypeObject*type)¶
- 回傳值:借用參照。 為穩定 ABI 的一部分.
Initialize a newly allocated objectop with its type and initialreference. Returns the initialized object. Other fields of the object arenot initialized. Despite its name, this function is unrelated to theobject's
__init__()
method (tp_init
slot). Specifically, this function doesnot call the object's__init__()
method.In general, consider this function to be a low-level routine. Use
tp_alloc
where possible.For implementingtp_alloc
for your type, preferPyType_GenericAlloc()
orPyObject_New()
.備註
This function only initializes the object's memory corresponding to theinitial
PyObject
structure. It does not zero the rest.
- PyVarObject*PyObject_InitVar(PyVarObject*op,PyTypeObject*type,Py_ssize_tsize)¶
- 回傳值:借用參照。 為穩定 ABI 的一部分.
它會做到
PyObject_Init()
的所有功能,並且會初始化一個大小可變物件的長度資訊。備註
This function only initializes some of the object's memory. It does notzero the rest.
- PyObject_New(TYPE,typeobj)¶
使用 C 結構型別TYPE 和 Python 型別物件typeobj (
PyTypeObject*
) 分配一個新的 Python 物件。它會呼叫PyObject_Malloc()
來分配記憶體,並且會像PyObject_Init()
一樣初始化它。呼叫者會擁有該物件的唯一參照(也就是它的參照計數會是 1)。Avoid calling this directly to allocate memory for an object; call the type's
tp_alloc
slot instead.When populating a type's
tp_alloc
slot,PyType_GenericAlloc()
is preferred over a custom function thatsimply calls this macro.這個巨集不會呼叫
tp_alloc
、tp_new
(__new__()
)、或tp_init
(__init__()
)。這不能用於有在
tp_flags
中設定Py_TPFLAGS_HAVE_GC
的物件;請改用PyObject_GC_New
。Memory allocated by this macro must be freed with
PyObject_Free()
(usually called via the object'stp_free
slot).備註
The returned memory is not guaranteed to have been completely zeroedbefore it was initialized.
備註
This macro does not construct a fully initialized object of the giventype; it merely allocates memory and prepares it for furtherinitialization by
tp_init
. To construct afully initialized object, calltypeobj instead. For example:PyObject*foo=PyObject_CallNoArgs((PyObject*)&PyFoo_Type);
- PyObject_NewVar(TYPE,typeobj,size)¶
和
PyObject_New
類似,但有以下差異:It allocates enough memory for theTYPE structure plussize(
Py_ssize_t
) fields of the size given by thetp_itemsize
field oftypeobj.記憶體會像
PyObject_InitVar()
一樣被初始化。
This is useful for implementing objects like tuples, which are able todetermine their size at construction time. Embedding the array of fieldsinto the same allocation decreases the number of allocations, improving thememory management efficiency.
Avoid calling this directly to allocate memory for an object; call the type's
tp_alloc
slot instead.When populating a type's
tp_alloc
slot,PyType_GenericAlloc()
is preferred over a custom function thatsimply calls this macro.這不能用於有在
tp_flags
中設定Py_TPFLAGS_HAVE_GC
的物件;請改用PyObject_GC_NewVar
。Memory allocated by this function must be freed with
PyObject_Free()
(usually called via the object'stp_free
slot).備註
The returned memory is not guaranteed to have been completely zeroedbefore it was initialized.
備註
This macro does not construct a fully initialized object of the giventype; it merely allocates memory and prepares it for furtherinitialization by
tp_init
. To construct afully initialized object, calltypeobj instead. For example:PyObject*list_instance=PyObject_CallNoArgs((PyObject*)&PyList_Type);
- voidPyObject_Del(void*op)¶
和
PyObject_Free()
相同。
也參考
- 模組物件
分配記憶體和建立擴充模組。