allocation.md
1> **Источник:** https://python-all.ru/3.2/c-api/allocation.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Выделение объектов в куче89#### `PyObject* _PyObject_New(PyTypeObject *type)`1011*Возвращаемое значение: новая ссылка.*1213#### `PyVarObject* _PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)`1415*Возвращаемое значение: новая ссылка.*1617#### `PyObject* PyObject_Init(PyObject *op, PyTypeObject *type)`1819*Возвращаемое значение: заимствованная ссылка.*2021Инициализирует только что выделенный объект *op*, устанавливая его тип и начальную ссылку. Возвращает инициализированный объект. Если *type* указывает, что объект участвует в детекторе циклического мусора, он добавляется в набор наблюдаемых объектов детектора. Остальные поля объекта не затрагиваются.2223#### `PyVarObject* PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)`2425*Возвращаемое значение: заимствованная ссылка.*2627Делает всё то же, что и [`PyObject_Init()`](https://python-all.ru/3.2/c-api/allocation.html#PyObject_Init), а также инициализирует информацию о длине для объекта переменного размера.2829#### `TYPE* PyObject_New(TYPE, PyTypeObject *type)`3031*Возвращаемое значение: новая ссылка.*3233Выделяет новый объект Python с помощью структуры C *TYPE* и объекта типа Python *type*. Поля, не определённые заголовком объекта Python, не инициализируются; счётчик ссылок объекта будет равен единице. Размер выделяемой памяти определяется полем `tp_basicsize` объекта типа.3435#### `TYPE* PyObject_NewVar(TYPE, PyTypeObject *type, Py_ssize_t size)`3637*Возвращаемое значение: новая ссылка.*3839Выделяет новый объект Python с помощью структуры C *TYPE* и объекта типа Python *type*. Поля, не определённые заголовком объекта Python, не инициализируются. Выделенная память предназначена для структуры *TYPE* плюс *size* полей размером, заданным полем `tp_itemsize` объекта *type*. Это полезно для реализации объектов, подобных кортежам, которые могут определять свой размер во время создания. Встраивание массива полей в то же выделение памяти уменьшает количество выделений, повышая эффективность управления памятью.4041#### `void PyObject_Del(PyObject *op)`4243Освобождает память, выделенную объекту с помощью [`PyObject_New()`](https://python-all.ru/3.2/c-api/allocation.html#PyObject_New) или [`PyObject_NewVar()`](https://python-all.ru/3.2/c-api/allocation.html#PyObject_NewVar). Обычно вызывается из обработчика `tp_dealloc`, заданного в типе объекта. К полям объекта нельзя обращаться после этого вызова, так как память больше не является валидным объектом Python.4445**[PyObject](https://python-all.ru/3.2/c-api/structures.html#PyObject) `_Py_NoneStruct`**4647Объект, который в Python виден как `None`. Доступ к нему следует получать только с помощью макроса [`Py_None`](https://python-all.ru/3.2/c-api/none.html#Py_None), который вычисляет указатель на этот объект.4849> **См. также**50>51> **[`PyModule_Create()`](https://python-all.ru/3.2/c-api/module.html#PyModule_Create)**52>53> Для выделения памяти и создания модулей расширений.54