Spec-Zone.ru › Python 3.13

Выделение объектов в куче

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)

Выделяет новый объект Python, используя тип структуры C TYPE и объект типа Python typeobj (PyTypeObject*). Поля, не определённые заголовком объекта Python, не инициализируются. Вызывающий код будет владеть единственной ссылкой на объект (то есть счётчик ссылок будет равен единице). Размер выделяемой памяти определяется полем tp_basicsize объекта типа.

Обратите внимание, что эта функция не подходит, если для typeobj установлен флаг Py_TPFLAGS_HAVE_GC. Для таких объектов используйте PyObject_GC_New().

PyObject_NewVar(TYPE, typeobj, size)

Выделяет новый объект Python, используя тип структуры C TYPE и объект типа Python typeobj (PyTypeObject*). Поля, не определённые заголовком объекта Python, не инициализируются. Выделенная память позволяет разместить структуру TYPE и size (Py_ssize_t) полей размером, заданным полем tp_itemsize объекта typeobj. Это полезно при реализации объектов, например кортежей, размер которых можно определить во время создания. Размещение массива полей в том же блоке памяти сокращает число выделений памяти и повышает эффективность управления памятью.

Обратите внимание, что эта функция не подходит, если для typeobj установлен флаг Py_TPFLAGS_HAVE_GC. Для таких объектов используйте PyObject_GC_NewVar().

void PyObject_Del(void *op)

Освобождает память, выделенную для объекта с помощью PyObject_New или PyObject_NewVar. Обычно вызывается из обработчика tp_dealloc, указанного в типе объекта. После этого вызова нельзя обращаться к полям объекта, поскольку память больше не содержит допустимый объект Python.

PyObject _Py_NoneStruct

Объект, представленный в Python как None. К нему следует обращаться только с помощью макроса Py_None, который вычисляется в указатель на этот объект.

См. также

Объекты модулей

Выделение памяти и создание модулей расширения.

© 2001–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/c-api/allocation.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API