Документация Python неофициальный перевод
Содержание страницы

Выделение объектов в кучеAllocating objects on the heap

PyObject *_PyObject_New(PyTypeObject *type)
Возвращаемое значение: новая ссылка.
PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)
Возвращаемое значение: новая ссылка.
PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)
Возвращаемое значение: заимствованная ссылка. Часть Stable ABI.

Инициализирует вновь выделенный объект op его типом и начальной ссылкой. Возвращает инициализированный объект. Прочие поля объекта не затрагиваются.

PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)
Возвращаемое значение: заимствованная ссылка. Часть Stable 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().

PyObject _Py_NoneStruct

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

См. также

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

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

Условно устаревшие псевдонимыSoft-deprecated aliases

Мягко устарело, начиная с версии 3.10.

Это псевдонимы существующих функций и макросов. Они существуют только для обратной совместимости.

Мягко устаревший псевдоним

Функция

PyObject_NEW(type, typeobj)

PyObject_New

PyObject_NEW_VAR(type, typeobj, n)

PyObject_NewVar

PyObject_INIT(op, typeobj)

PyObject_Init()

PyObject_INIT_VAR(op, typeobj, n)

PyObject_InitVar()

PyObject_MALLOC(n)

PyObject_Malloc()

PyObject_REALLOC(p, n)

PyObject_Realloc()

PyObject_FREE(p)

PyObject_Free()

PyObject_DEL(p)

PyObject_Free()

PyObject_Del(p)

PyObject_Free()