Выделение объектов в куче¶Allocating Objects on the Heap
-
PyObject*
_PyObject_New(PyTypeObject *type)¶ - Возвращаемое значение: новая ссылка.
-
PyVarObject*
_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)¶ - Возвращаемое значение: новая ссылка.
Изменено в версии 2.5: Эта функция использовала тип
intдля size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
-
PyObject*
PyObject_Init(PyObject *op, PyTypeObject *type)¶ - Возвращаемое значение: заимствованная ссылка.
Инициализирует только что выделенный объект op, устанавливая его тип и начальную ссылку. Возвращает инициализированный объект. Если type указывает, что объект участвует в детекторе циклического мусора, он добавляется в набор наблюдаемых объектов детектора. Остальные поля объекта не затрагиваются.
-
PyVarObject*
PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)¶ - Возвращаемое значение: заимствованная ссылка.
Эта функция делает всё то же, что и
PyObject_Init(), а также инициализирует информацию о длине для объекта переменного размера.Изменено в версии 2.5: Эта функция использовала тип
intдля size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
-
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_itemsizeиз type. Это удобно для реализации таких объектов, как кортежи, которые могут определять свой размер во время создания. Встраивание массива полей в ту же область выделения уменьшает число выделений, повышая эффективность управления памятью.Изменено в версии 2.5: Эта функция использовала тип
intдля size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
-
void
PyObject_Del(PyObject *op)¶ Освобождает память, выделенную объекту с помощью
PyObject_New()илиPyObject_NewVar(). Обычно вызывается изtp_deallocобработчика, указанного в типе объекта. После этого вызова поля объекта не должны использоваться, так как память больше не является допустимым объектом Python.
-
PyObject*
Py_InitModule(char *name, PyMethodDef *methods)¶ - Возвращаемое значение: заимствованная ссылка.
Создаёт новый объект модуля на основе имени и таблицы функций, возвращая новый объект модуля.
Изменено в версии 2.3: Более старые версии Python не поддерживали NULL в качестве значения для аргумента methods.
-
PyObject*
Py_InitModule3(char *name, PyMethodDef *methods, char *doc)¶ - Возвращаемое значение: заимствованная ссылка.
Создаёт новый объект модуля на основе имени и таблицы функций, возвращая новый объект модуля. Если doc не равен NULL, он будет использован для определения строки документации модуля.
Изменено в версии 2.3: Более старые версии Python не поддерживали NULL в качестве значения для аргумента methods.
-
PyObject*
Py_InitModule4(char *name, PyMethodDef *methods, char *doc, PyObject *self, int apiver)¶ - Возвращаемое значение: заимствованная ссылка.
Создаёт новый объект модуля на основе имени и таблицы функций, возвращая новый объект модуля. Если doc не равен NULL, он будет использован для определения строки документации модуля. Если self не равен NULL, он будет передан функциям модуля в качестве их (в противном случае NULL) первого параметра. (Это было добавлено как экспериментальная возможность, и на данный момент нет известных случаев использования в текущей версии Python.) Для apiver единственное значение, которое следует передавать, определяется константой
PYTHON_API_VERSION.Примечание
В большинстве случаев вместо этой функции следует использовать
Py_InitModule3(); используйте её, только если уверены, что она нужна.Изменено в версии 2.3: Более старые версии Python не поддерживали NULL в качестве значения для аргумента methods.