Выделение объектов в куче
-
PyObject* _PyObject_New(PyTypeObject *type) - Значение возврата: Новая ссылка.
-
PyVarObject* _PyObject_NewVar(PyTypeObject *type, Py_ssize_t size) - Значение возврата: Новая ссылка.
-
PyObject* PyObject_Init(PyObject *op, PyTypeObject *type) -
Значение возврата: Заимствованная ссылка.
Инициализирует недавно выделенный объект op своим типом и начальной ссылкой. Возвращает инициализированный объект. Если type указывает, что объект участвует в детекторе циклического мусора, он добавляется в набор наблюдаемых объектов детектора. Другие поля объекта не затрагиваются.
-
PyVarObject* PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size) -
Значение возврата: Заимствованная ссылка.
Выполняет все, что делает
PyObject_Init(), а также инициализирует информацию о длине для объекта переменной длины.
-
TYPE* PyObject_New(TYPE, PyTypeObject *type) -
Значение возврата: Новая ссылка.
Выделяет новый объект Python, используя C-структуру типа TYPE и объект типа Python type. Поля, не определенные заголовком объекта Python, не инициализируются; счётчик ссылок объекта будет равен одному. Размер выделения памяти определяется из поля
tp_basicsizeобъекта типа.
-
TYPE* PyObject_NewVar(TYPE, PyTypeObject *type, Py_ssize_t size) -
Значение возврата: Новая ссылка.
Выделяет новый объект Python, используя C-структуру типа TYPE и объект типа Python type. Поля, не определенные заголовком объекта Python, не инициализируются. Выделенная память позволяет использовать структуру TYPE плюс поля size размером, заданным полем
tp_itemsizetype. Это полезно для реализации объектов, таких как кортежи, которые могут определить свой размер при создании. Встраивание массива полей в то же выделение уменьшает количество выделений, улучшая эффективность управления памятью.
-
void PyObject_Del(void *op) -
Освобождает память, выделенную объекту с помощью
PyObject_New()илиPyObject_NewVar(). Обычно это вызывается из обработчикаtp_dealloc, указанного в типе объекта. После этого вызова к полям объекта обращаться нельзя, так как память больше не является допустимым объектом Python.
-
PyObject _Py_NoneStruct -
Объект, отображаемый в Python как
None. К нему следует обращаться только с помощью макросаPy_None, который оценивается как указатель на этот объект.
См. также
-
PyModule_Create() -
Для выделения и создания модулей расширения.
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/c-api/allocation.html