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

allocation.md

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

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