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

---

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

**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `_PyObject_New`([PyTypeObject](https://python-all.ru/3.1/c-api/type.html#PyTypeObject) *\*type*)**

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

**[PyVarObject](https://python-all.ru/3.1/c-api/structures.html#PyVarObject)\* `_PyObject_NewVar`([PyTypeObject](https://python-all.ru/3.1/c-api/type.html#PyTypeObject) *\*type*, Py\_ssize\_t *size*)**

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

**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyObject_Init`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*op*, [PyTypeObject](https://python-all.ru/3.1/c-api/type.html#PyTypeObject) *\*type*)**

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

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

**[PyVarObject](https://python-all.ru/3.1/c-api/structures.html#PyVarObject)\* `PyObject_InitVar`([PyVarObject](https://python-all.ru/3.1/c-api/structures.html#PyVarObject) *\*op*, [PyTypeObject](https://python-all.ru/3.1/c-api/type.html#PyTypeObject) *\*type*, Py\_ssize\_t *size*)**

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

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

**TYPE\* `PyObject_New`(TYPE, [PyTypeObject](https://python-all.ru/3.1/c-api/type.html#PyTypeObject) *\*type*)**

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

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

**TYPE\* `PyObject_NewVar`(TYPE, [PyTypeObject](https://python-all.ru/3.1/c-api/type.html#PyTypeObject) *\*type*, Py\_ssize\_t *size*)**

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

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

**void `PyObject_Del`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*op*)**

Освобождает память, выделенную объекту с помощью

[`PyObject_New()`](https://python-all.ru/3.1/c-api/allocation.html#PyObject_New)

или

[`PyObject_NewVar()`](https://python-all.ru/3.1/c-api/allocation.html#PyObject_NewVar)

. Обычно вызывается из обработчика

[`tp_dealloc`](https://python-all.ru/3.1/c-api/typeobj.html#tp_dealloc)

, указанного в типе объекта. После этого вызова поля объекта не следует использовать, так как память больше не является допустимым объектом Python.

**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) `_Py_NoneStruct`**

Объект, который в Python виден как

`None`

. Доступ к нему следует получать только с помощью макроса

[`Py_None`](https://python-all.ru/3.1/c-api/none.html#Py_None)

, который вычисляет указатель на этот объект.

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