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

allocation.md

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

1> **Источник:** https://python-all.ru/3.0/c-api/allocation.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Выделение объектов в куче89**\[\_PyObject\_New\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `_PyObject_New`([PyTypeObject](https://python-all.ru/3.0/c-api/type.html#PyTypeObject) *\*type*)**1011*Возвращаемое значение: новая ссылка.*1213**\[\_PyObject\_NewVar\][PyVarObject](https://python-all.ru/3.0/c-api/structures.html#PyVarObject)\* `_PyObject_NewVar`([PyTypeObject](https://python-all.ru/3.0/c-api/type.html#PyTypeObject) *\*type*, Py\_ssize\_t *size*)**1415*Возвращаемое значение: новая ссылка.*1617**\[PyObject\_Init\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyObject_Init`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*op*, [PyTypeObject](https://python-all.ru/3.0/c-api/type.html#PyTypeObject) *\*type*)**1819*Возвращаемое значение: заимствованная ссылка.*2021Инициализирует только что выделенный объект *op*, устанавливая его тип и начальную ссылку. Возвращает инициализированный объект. Если *type* указывает, что объект участвует в обнаружении циклического мусора, он добавляется в набор наблюдаемых объектов детектора. Остальные поля объекта не затрагиваются.2223**\[PyObject\_InitVar\][PyVarObject](https://python-all.ru/3.0/c-api/structures.html#PyVarObject)\* `PyObject_InitVar`([PyVarObject](https://python-all.ru/3.0/c-api/structures.html#PyVarObject) *\*op*, [PyTypeObject](https://python-all.ru/3.0/c-api/type.html#PyTypeObject) *\*type*, Py\_ssize\_t *size*)**2425*Возвращаемое значение: заимствованная ссылка.*2627Эта функция делает всё то же, что и [`PyObject_Init`](https://python-all.ru/3.0/c-api/allocation.html#PyObject_Init), а также инициализирует информацию о длине для объекта переменного размера.2829**\[PyObject\_New\]TYPE\* `PyObject_New`(TYPE, [PyTypeObject](https://python-all.ru/3.0/c-api/type.html#PyTypeObject) *\*type*)**3031*Возвращаемое значение: новая ссылка.*3233Выделяет новый объект Python, используя C-структуру типа *TYPE* и объект типа Python *type*. Поля, не определённые заголовком объекта Python, не инициализируются; счётчик ссылок объекта устанавливается в единицу. Размер выделяемой памяти определяется из поля [`tp_basicsize`](https://python-all.ru/3.0/c-api/typeobj.html#tp_basicsize) объекта типа.3435**\[PyObject\_NewVar\]TYPE\* `PyObject_NewVar`(TYPE, [PyTypeObject](https://python-all.ru/3.0/c-api/type.html#PyTypeObject) *\*type*, Py\_ssize\_t *size*)**3637*Возвращаемое значение: новая ссылка.*3839Выделяет новый объект Python, используя C-структуру типа *TYPE* и объект типа Python *type*. Поля, не определённые заголовком объекта Python, не инициализируются. Выделенная память рассчитана на структуру *TYPE* плюс *size* полей размером, заданным полем [`tp_itemsize`](https://python-all.ru/3.0/c-api/typeobj.html#tp_itemsize) объекта *type*. Это полезно для реализации таких объектов, как кортежи, которые могут определить свой размер во время конструирования. Встраивание массива полей в одно выделение памяти уменьшает количество выделений, повышая эффективность управления памятью.4041**\[PyObject\_Del\]void `PyObject_Del`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*op*)**4243Освобождает память, выделенную объекту с помощью4445[`PyObject_New`](https://python-all.ru/3.0/c-api/allocation.html#PyObject_New)4647или4849[`PyObject_NewVar`](https://python-all.ru/3.0/c-api/allocation.html#PyObject_NewVar)5051. Обычно эта функция вызывается из обработчика5253[`tp_dealloc`](https://python-all.ru/3.0/c-api/typeobj.html#tp_dealloc)5455, указанного в типе объекта. После этого вызова поля объекта не должны использоваться, так как память больше не является допустимым объектом Python.5657**\[Py\_InitModule\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `Py_InitModule`(char *\*name*, [PyMethodDef](https://python-all.ru/3.0/c-api/structures.html#PyMethodDef) *\*methods*)**5859*Возвращаемое значение: заимствованная ссылка.*6061Создаёт новый объект модуля на основе имени и таблицы функций, возвращая новый объект модуля; аргумент *methods* может быть *NULL*, если для модуля не нужно определять методы.6263**\[Py\_InitModule3\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `Py_InitModule3`(char *\*name*, [PyMethodDef](https://python-all.ru/3.0/c-api/structures.html#PyMethodDef) *\*methods*, char *\*doc*)**6465*Возвращаемое значение: заимствованная ссылка.*6667Создаёт новый объект модуля на основе имени и таблицы функций, возвращая новый объект модуля. Аргумент *methods* может быть *NULL*, если для модуля не нужно определять методы. Если *doc* не равен *NULL*, он будет использован для задания строки документации модуля.6869**\[Py\_InitModule4\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `Py_InitModule4`(char *\*name*, [PyMethodDef](https://python-all.ru/3.0/c-api/structures.html#PyMethodDef) *\*methods*, char *\*doc*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*self*, int *apiver*)**7071*Возвращаемое значение: заимствованная ссылка.*7273Создаёт новый объект модуля на основе имени и таблицы функций, возвращая новый объект модуля. Аргумент *methods* может быть *NULL*, если для модуля не нужно определять методы. Если *doc* не равен *NULL*, он будет использован для задания строки документации модуля. Если *self* не равен *NULL*, он будет передан функциям модуля как их первый параметр (иначе он был бы *NULL*). (Это было добавлено как экспериментальная возможность, и на текущей версии Python нет известных случаев её использования.) Для *apiver* единственное значение, которое следует передавать, определяется константой `PYTHON_API_VERSION`.7475> **Примечание**76>77> В большинстве случаев вместо этой функции следует использовать [`Py_InitModule3`](https://python-all.ru/3.0/c-api/allocation.html#Py_InitModule3); используйте эту только если уверены, что она вам нужна.7879**\[\_Py\_NoneStruct\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) `_Py_NoneStruct`**8081Объект, который в Python виден как8283`None`8485. Доступ к нему следует получать только с помощью макроса8687[`Py_None`](https://python-all.ru/3.0/c-api/none.html#Py_None)8889, который вычисляет указатель на этот объект.90