> **Источник:** https://python-all.ru/3.13/c-api/allocation.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

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

#### `PyObject *_PyObject_New(PyTypeObject *type)`

*Возвращаемое значение: новая ссылка.*

#### `PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)`

*Возвращаемое значение: новая ссылка.*

#### `PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)`

*Возвращаемое значение: заимствованная ссылка.*

*Часть [Stable ABI](https://python-all.ru/3.13/c-api/stable.html#stable).*

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

#### `PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)`

*Возвращаемое значение: заимствованная ссылка.*

*Часть [Stable ABI](https://python-all.ru/3.13/c-api/stable.html#stable).*

Эта функция делает всё то же, что и [`PyObject_Init()`](https://python-all.ru/3.13/c-api/allocation.html#c.PyObject_Init), а также инициализирует информацию о длине для объекта переменного размера.

#### `PyObject_New(TYPE, typeobj)`

Выделяет новый объект Python с использованием типа структуры C *TYPE* и объекта типа Python *typeobj* (`PyTypeObject*`). Поля, не определённые заголовком объекта Python, не инициализируются. Вызывающий становится единственным владельцем ссылки на объект (т.е. её счётчик ссылок будет равен единице). Размер выделяемой памяти определяется из поля [`tp_basicsize`](https://python-all.ru/3.13/c-api/typeobj.html#c.PyTypeObject.tp_basicsize) объекта типа.

Обратите внимание, что эта функция не подходит, если у *typeobj* установлено [`Py_TPFLAGS_HAVE_GC`](https://python-all.ru/3.13/c-api/typeobj.html#c.Py_TPFLAGS_HAVE_GC). Для таких объектов используйте [`PyObject_GC_New()`](https://python-all.ru/3.13/c-api/gcsupport.html#c.PyObject_GC_New).

#### `PyObject_NewVar(TYPE, typeobj, size)`

Выделяет новый объект Python с использованием типа структуры C *TYPE* и объекта типа Python *typeobj* (`PyTypeObject*`). Поля, не определённые заголовком объекта Python, не инициализируются. Выделенная память рассчитана на структуру *TYPE* плюс *size* (`Py_ssize_t`) полей размера, заданного полем [`tp_itemsize`](https://python-all.ru/3.13/c-api/typeobj.html#c.PyTypeObject.tp_itemsize) объекта *typeobj*. Это полезно для реализации объектов, таких как кортежи, которые могут определить свой размер во время создания. Встраивание массива полей в одно выделение уменьшает количество выделений, повышая эффективность управления памятью.

Обратите внимание, что эта функция не подходит, если у *typeobj* установлено [`Py_TPFLAGS_HAVE_GC`](https://python-all.ru/3.13/c-api/typeobj.html#c.Py_TPFLAGS_HAVE_GC). Для таких объектов используйте [`PyObject_GC_NewVar()`](https://python-all.ru/3.13/c-api/gcsupport.html#c.PyObject_GC_NewVar).

#### `PyObject _Py_NoneStruct`

Объект, который виден в Python как `None`. Доступ к нему следует получать только через макрос [`Py_None`](https://python-all.ru/3.13/c-api/none.html#c.Py_None), который вычисляет указатель на этот объект.

> **См. также**
>
> **[Объекты модулей](https://python-all.ru/3.13/c-api/module.html#moduleobjects)**
>
> Для выделения памяти и создания модулей расширений.

## Условно устаревшие псевдонимы

[Мягко устарело](https://python-all.ru/3.13/glossary.html#term-soft-deprecated), начиная с версии 3.10.

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

| Мягко устаревший псевдоним | Функция |
| --- | --- |
| PyObject\_NEW(type, typeobj) | [`PyObject_New`](https://python-all.ru/3.13/c-api/allocation.html#c.PyObject_New) |
| PyObject\_NEW\_VAR(type, typeobj, n) | [`PyObject_NewVar`](https://python-all.ru/3.13/c-api/allocation.html#c.PyObject_NewVar) |
| PyObject\_INIT(op, typeobj) | [`PyObject_Init()`](https://python-all.ru/3.13/c-api/allocation.html#c.PyObject_Init) |
| PyObject\_INIT\_VAR(op, typeobj, n) | [`PyObject_InitVar()`](https://python-all.ru/3.13/c-api/allocation.html#c.PyObject_InitVar) |
| PyObject\_MALLOC(n) | [`PyObject_Malloc()`](https://python-all.ru/3.13/c-api/memory.html#c.PyObject_Malloc) |
| PyObject\_REALLOC(p, n) | [`PyObject_Realloc()`](https://python-all.ru/3.13/c-api/memory.html#c.PyObject_Realloc) |
| PyObject\_FREE(p) | [`PyObject_Free()`](https://python-all.ru/3.13/c-api/memory.html#c.PyObject_Free) |
| PyObject\_DEL(p) | [`PyObject_Free()`](https://python-all.ru/3.13/c-api/memory.html#c.PyObject_Free) |
| PyObject\_Del(p) | [`PyObject_Free()`](https://python-all.ru/3.13/c-api/memory.html#c.PyObject_Free) |
