Выделение объектов в куче¶Allocating Objects on the Heap
-
PyObject *_PyObject_New(PyTypeObject *type)¶
- Возвращаемое значение: новая ссылка.
-
PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)¶
- Возвращаемое значение: новая ссылка.
-
PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)¶
- Возвращаемое значение: заимствованная ссылка. Часть Stable ABI.
Инициализирует вновь выделенный объект op его типом и начальной ссылкой. Возвращает инициализированный объект. Прочие поля объекта не затрагиваются.
-
PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)¶
- Возвращаемое значение: заимствованная ссылка. Часть Stable ABI.
Эта функция делает всё то же, что и
PyObject_Init(), а также инициализирует информацию о длине для объекта переменного размера.
-
PyObject_New(TYPE, typeobj)¶
Выделяет новый объект Python с использованием типа структуры C TYPE и объекта типа Python typeobj (
PyTypeObject*). Поля, не определённые заголовком объекта Python, не инициализируются. Вызывающий становится единственным владельцем ссылки на объект (т.е. её счётчик ссылок будет равен единице). Размер выделяемой памяти определяется из поляtp_basicsizeобъекта типа.Обратите внимание, что эта функция не подходит, если у typeobj установлено
Py_TPFLAGS_HAVE_GC. Для таких объектов используйтеPyObject_GC_New().
-
PyObject_NewVar(TYPE, typeobj, size)¶
Выделяет новый объект Python с использованием типа структуры C TYPE и объекта типа Python typeobj (
PyTypeObject*). Поля, не определённые заголовком объекта Python, не инициализируются. Выделенная память рассчитана на структуру TYPE плюс size (Py_ssize_t) полей размера, заданного полемtp_itemsizeобъекта typeobj. Это полезно для реализации объектов, таких как кортежи, которые могут определить свой размер во время создания. Встраивание массива полей в одно выделение уменьшает количество выделений, повышая эффективность управления памятью.Обратите внимание, что эта функция не подходит, если у typeobj установлено
Py_TPFLAGS_HAVE_GC. Для таких объектов используйтеPyObject_GC_NewVar().
-
void PyObject_Del(void *op)¶
Освобождает память, выделенную объекту с помощью
PyObject_NewилиPyObject_NewVar. Обычно вызывается изtp_deallocобработчика, указанного в типе объекта. После этого вызова поля объекта не должны использоваться, так как память больше не является допустимым объектом Python.
-
PyObject _Py_NoneStruct¶
Объект, который виден в Python как
None. Доступ к нему следует получать только через макросPy_None, который вычисляет указатель на этот объект.
См. также
PyModule_Create()Для выделения памяти и создания модулей расширений.