# 在 heap 上分配物件

PyObject *_PyObject_New(PyTypeObject *type)
  回傳值：新的參照。

PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)
  回傳值：新的參照。

PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)
  回傳值：借用參照。 為 穩定 ABI 的一部分.

  用它的型別和初始參照來初始化新分配物件 op。已初始化的物件會被回傳。物件的其他欄位不受影響。

PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)
  回傳值：借用參照。 為 穩定 ABI 的一部分.

  它會做到 `PyObject_Init()` 的所有功能，並且會初始化一個大小可變物件的長度資訊。

PyObject_New(TYPE, typeobj)

  使用 C 結構型別 TYPE 和 Python 型別物件 typeobj (`PyTypeObject*`) 分配一個新的 Python 物件。未在該 Python 物件標頭 (header) 中定義的欄位不會被初始化；呼叫者會擁有那個對於物件的唯一參照（物件的參照計數為一）。記憶體分配大小由 type 物件的 `tp_basicsize` 欄位來指定。

  注意，如果 typeobj 有 `Py_TPFLAGS_HAVE_GC` 設定，則此函式不適用。對於這種物件，請改用 `PyObject_GC_New()`。

PyObject_NewVar(TYPE, typeobj, size)

  使用 C 的結構型別 TYPE 和 Python 的型別物件 typeobj (`PyTypeObject*`) 分配一個新的 Python 物件。未在該 Python 物件標頭中定義的欄位不會被初始化。記憶體空間預留了 TYPE 結構大小再加上 typeobj 物件中 `tp_itemsize` 欄位提供的 size (`Py_ssize_t`) 欄位的值。這對於實現如 tuple 這種能夠在建立期間決定自己大小的物件是很實用的。將欄位的陣列嵌入到相同的記憶體分配中可以減少記憶體分配的次數，這提高了記憶體管理的效率。

  注意，如果 typeobj 有 `Py_TPFLAGS_HAVE_GC` 設定，則此函式不適用。對於這種物件，請改用 `PyObject_GC_NewVar()`。

PyObject _Py_NoneStruct

  這個物件像是 Python 中的 `None`。它只應該透過 `Py_None` 巨集來存取，該巨集的拿到指向該物件的指標。

也參考

模組物件

  分配記憶體和建立擴充模組。

## Deprecated aliases

These are soft deprecated aliases to existing functions and macros. They exist solely for backwards compatibility.

Deprecated alias | Function
--- | ---
PyObject_NEW(type, typeobj) | `PyObject_New`
PyObject_NEW_VAR(type, typeobj, n) | `PyObject_NewVar`
PyObject_INIT(op, typeobj) | `PyObject_Init()`
PyObject_INIT_VAR(op, typeobj, n) | `PyObject_InitVar()`
PyObject_MALLOC(n) | `PyObject_Malloc()`
PyObject_REALLOC(p, n) | `PyObject_Realloc()`
PyObject_FREE(p) | `PyObject_Free()`
PyObject_DEL(p) | `PyObject_Free()`
PyObject_Del(p) | `PyObject_Free()`