在 heap 上分配物件
******************

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

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

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

   用它的型別和初始參照來初始化新分配物件 *op*。已初始化的物件會被回傳
   。如果 *type* 表示了該物件參與迴圈垃圾檢查器，則將其新增到檢查器的
   觀察物件集合中。物件的其他欄位不受影響。

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" 欄位來指定。

PyObject_NewVar(TYPE, typeobj, size)

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

void PyObject_Del(void *op)

   釋放由 "PyObject_New" 或者 "PyObject_NewVar" 分配給物件的記憶體。這
   通常是在物件型別所指定的 "tp_dealloc" handler 中呼叫。呼叫這個函式
   以後，物件的各欄位都不可以被存取，因為原本分配的記憶體已不再是一個
   有效的 Python 物件。

PyObject _Py_NoneStruct

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

也參考:

  "PyModule_Create()"
     分配記憶體和建立擴充模組。
