# Розміщення об’єктів у купі

PyObject *_PyObject_New(PyTypeObject *type)
  Return value: New reference.

PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)
  Return value: New reference.

PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)
  Return value: Borrowed reference. Part of the Stable ABI.

  Initialize a newly allocated object op with its type and initial reference. Returns the initialized object. If type indicates that the object participates in the cyclic garbage detector, it is added to the detector’s set of observed objects. Other fields of the object are not affected.

PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)
  Return value: Borrowed reference. Part of the Stable ABI.

  Це робить все, що робить `PyObject_Init()`, а також ініціалізує інформацію про довжину для об’єкта змінного розміру.

PyObject_New(TYPE, typeobj)

  Allocate a new Python object using the C structure type TYPE and the Python type object typeobj (`PyTypeObject*`). Fields not defined by the Python object header are not initialized. The caller will own the only reference to the object (i.e. its reference count will be one). The size of the memory allocation is determined from the `tp_basicsize` field of the type object.

PyObject_NewVar(TYPE, typeobj, size)

  Виділяє новий об’єкт Python, використовуючи структурний тип C TYPE та об’єкт типу Python typeobj (`PyTypeObject*`). Поля, не визначені в заголовку об’єкта Python, не ініціалізуються. Виділена пам’ять дозволяє розмістити структуру TYPE плюс поля size (`Py_ssize_t`) розміром, заданим полем `tp_itemsize` об’єкта typeobj. Це корисно для реалізації об’єктів типу кортежів, які можуть визначати свій розмір під час конструювання. Вбудовування масиву полів в один розподіл зменшує кількість розподілів, покращуючи ефективність управління пам’яттю.

void PyObject_Del(void *op)

  Звільняє пам’ять, виділену для об’єкта за допомогою `PyObject_New` або `PyObject_NewVar`. Зазвичай викликається з обробника `tp_dealloc`, вказаного в типі об’єкта. Після цього виклику не слід звертатися до полів об’єкта, оскільки пам’ять більше не є дійсним об’єктом Python.

PyObject _Py_NoneStruct

  Об’єкт, видимий у Python як `None`. Доступ до нього можна отримати лише за допомогою макросу `Py_None`, який обчислює вказівник на цей об’єкт.

Дивись також

`PyModule_Create()`

  Для розміщення та створення модулів розширення.