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

allocation.md

58 строк · 5.2 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.10/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*Часть [Stable ABI](https://python-all.ru/3.10/c-api/stable.html#stable).*2223Инициализирует только что выделенный объект *op* его типом и начальной ссылкой. Возвращает инициализированный объект. Если *type* указывает, что объект участвует в детекторе циклического мусора, он добавляется в набор наблюдаемых объектов детектора. Остальные поля объекта не затрагиваются.2425#### `PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)`2627*Возвращаемое значение: заимствованная ссылка.*2829*Часть [Stable ABI](https://python-all.ru/3.10/c-api/stable.html#stable).*3031Эта функция делает всё то же, что и [`PyObject_Init()`](https://python-all.ru/3.10/c-api/allocation.html#c.PyObject_Init), а также инициализирует информацию о длине для объекта переменного размера.3233#### `TYPE *PyObject_New(TYPE, PyTypeObject *type)`3435*Возвращаемое значение: новая ссылка.*3637Выделяет новый объект Python с помощью C-структуры *TYPE* и объекта типа Python *type*. Поля, не определённые заголовком объекта Python, не инициализируются. Вызывающий получает единственную ссылку на объект (то есть его счётчик ссылок будет равен единице). Размер выделяемой памяти определяется из поля [`tp_basicsize`](https://python-all.ru/3.10/c-api/typeobj.html#c.PyTypeObject.tp_basicsize) объекта типа.3839#### `TYPE *PyObject_NewVar(TYPE, PyTypeObject *type, Py_ssize_t size)`4041*Возвращаемое значение: новая ссылка.*4243Выделяет новый объект Python с помощью C-структуры *TYPE* и объекта типа Python *type*. Поля, не определённые заголовком объекта Python, не инициализируются. Выделенная память рассчитана на структуру *TYPE* плюс *size* полей размером, задаваемым полем [`tp_itemsize`](https://python-all.ru/3.10/c-api/typeobj.html#c.PyTypeObject.tp_itemsize) из *type*. Это удобно для реализации таких объектов, как кортежи, которые могут определять свой размер во время создания. Встраивание массива полей в ту же область выделения уменьшает число выделений, повышая эффективность управления памятью.4445#### `void PyObject_Del(void *op)`4647Освобождает память, выделенную объекту с помощью [`PyObject_New()`](https://python-all.ru/3.10/c-api/allocation.html#c.PyObject_New) или [`PyObject_NewVar()`](https://python-all.ru/3.10/c-api/allocation.html#c.PyObject_NewVar). Обычно вызывается из [`tp_dealloc`](https://python-all.ru/3.10/c-api/typeobj.html#c.PyTypeObject.tp_dealloc) обработчика, указанного в типе объекта. После этого вызова поля объекта не должны использоваться, так как память больше не является допустимым объектом Python.4849#### `PyObject _Py_NoneStruct`5051Объект, который виден в Python как `None`. Доступ к нему следует получать только через макрос [`Py_None`](https://python-all.ru/3.10/c-api/none.html#c.Py_None), который вычисляет указатель на этот объект.5253> **См. также**54>55> **[`PyModule_Create()`](https://python-all.ru/3.10/c-api/module.html#c.PyModule_Create)**56>57> Для выделения памяти и создания модулей расширений.58