Размещение объектов в куче¶
-
PyObject *_PyObject_New(PyTypeObject *type)¶
- Возвращаемое значение: Новая ссылка.
-
PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)¶
- Возвращаемое значение: Новая ссылка.
-
PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)¶
- Возвращаемое значение: Заимствованная ссылка. Part of the Стабильный ABI.
Инициализируйте вновь выделенный объект op с указанием его типа и начальной ссылки. Возвращает инициализированный объект. Если type указывает, что объект участвует в циклическом детекторе мусора, он добавляется в набор наблюдаемых объектов детектора. Другие поля объекта не затрагиваются.
-
PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)¶
- Возвращаемое значение: Заимствованная ссылка. Part of the Стабильный ABI.
Это делает все, что делает c:func:PyObject_Init, а также инициализирует информацию о длине для объекта переменного размера.
-
PyObject_New(TYPE, typeobj)¶
Выделите новый объект Python, используя структурный тип C TYPE и объект типа Python typeobj (
PyTypeObject*
). Поля, не определенные заголовком объекта Python, не инициализируются. Вызывающий объект будет владеть единственной ссылкой на объект (т.е. количество его ссылок будет равно единице). Размер выделяемой памяти определяется из поляtp_basicsize
типа object.
-
PyObject_NewVar(TYPE, typeobj, size)¶
Выделите новый объект Python, используя структурный тип C TYPE и объект типа Python typeobj (
PyTypeObject*
). Поля, не определенные заголовком объекта Python, не инициализируются. Выделенная память позволяет использовать структуру TYPE и размер* (Py_ssize_t
) полей, размер которых указан в полеtp_itemsize
в typeobj. Это полезно для реализации таких объектов, как кортежи, которые могут определять свой размер во время построения. Встраивание массива полей в одно и то же распределение уменьшает количество выделений, повышая эффективность управления памятью.
-
void PyObject_Del(void *op)¶
Освобождает память, выделенную объекту, используя
PyObject_New
илиPyObject_NewVar
. Обычно это вызывается из обработчикаtp_dealloc
, указанного в типе объекта. После этого вызова доступ к полям объекта осуществляться не должен, так как память больше не является допустимым объектом Python.
-
PyObject _Py_NoneStruct¶
Объект, который отображается в Python как
None
. Доступ к нему можно получить только с помощью макросаPy_None
, который вычисляет указатель на этот объект.
См.также
PyModule_Create()
Для выделения и создания модулей расширения.