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

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

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

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

   Initialize a newly allocated object *op* with its type and initial
   reference.  Returns the initialized object.  Other fields of the
   object are not initialized.  Despite its name, this function is
   unrelated to the object's "__init__()" method ("tp_init" slot).
   Specifically, this function does **not** call the object's
   "__init__()" method.

   In general, consider this function to be a low-level routine. Use
   "tp_alloc" where possible. For implementing "tp_alloc" for your
   type, prefer "PyType_GenericAlloc()" or "PyObject_New()".

   備註:

     This function only initializes the object's memory corresponding
     to the initial "PyObject" structure.  It does not zero the rest.

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

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

   備註:

     This function only initializes some of the object's memory.  It
     does not zero the rest.

PyObject_New(TYPE, typeobj)

   使用 C 結構型別 *TYPE* 和 Python 型別物件 *typeobj*
   ("PyTypeObject*") 分配一個新的 Python 物件。它會呼叫
   "PyObject_Malloc()" 來分配記憶體，並且會像 "PyObject_Init()" 一樣初
   始化它。呼叫者會擁有該物件的唯一參照（也就是它的參照計數會是 1）。

   Avoid calling this directly to allocate memory for an object; call
   the type's "tp_alloc" slot instead.

   When populating a type's "tp_alloc" slot, "PyType_GenericAlloc()"
   is preferred over a custom function that simply calls this macro.

   這個巨集不會呼叫 "tp_alloc"、"tp_new" ("__new__()")、或 "tp_init"
   ("__init__()")。

   這不能用於有在 "tp_flags" 中設定 "Py_TPFLAGS_HAVE_GC" 的物件；請改
   用 "PyObject_GC_New"。

   Memory allocated by this macro must be freed with "PyObject_Free()"
   (usually called via the object's "tp_free" slot).

   備註:

     The returned memory is not guaranteed to have been completely
     zeroed before it was initialized.

   備註:

     This macro does not construct a fully initialized object of the
     given type; it merely allocates memory and prepares it for
     further initialization by "tp_init".  To construct a fully
     initialized object, call *typeobj* instead.  For example:

        PyObject *foo = PyObject_CallNoArgs((PyObject *)&PyFoo_Type);

   也參考:

     * "PyObject_Free()"

     * "PyObject_GC_New"

     * "PyType_GenericAlloc()"

     * "tp_alloc"

PyObject_NewVar(TYPE, typeobj, size)

   和 "PyObject_New" 類似，但有以下差異：

   * It allocates enough memory for the *TYPE* structure plus *size*
     ("Py_ssize_t") fields of the size given by the "tp_itemsize"
     field of *typeobj*.

   * 記憶體會像 "PyObject_InitVar()" 一樣被初始化。

   This is useful for implementing objects like tuples, which are able
   to determine their size at construction time.  Embedding the array
   of fields into the same allocation decreases the number of
   allocations, improving the memory management efficiency.

   Avoid calling this directly to allocate memory for an object; call
   the type's "tp_alloc" slot instead.

   When populating a type's "tp_alloc" slot, "PyType_GenericAlloc()"
   is preferred over a custom function that simply calls this macro.

   這不能用於有在 "tp_flags" 中設定 "Py_TPFLAGS_HAVE_GC" 的物件；請改
   用 "PyObject_GC_NewVar"。

   Memory allocated by this function must be freed with
   "PyObject_Free()" (usually called via the object's "tp_free" slot).

   備註:

     The returned memory is not guaranteed to have been completely
     zeroed before it was initialized.

   備註:

     This macro does not construct a fully initialized object of the
     given type; it merely allocates memory and prepares it for
     further initialization by "tp_init".  To construct a fully
     initialized object, call *typeobj* instead.  For example:

        PyObject *list_instance = PyObject_CallNoArgs((PyObject *)&PyList_Type);

   也參考:

     * "PyObject_Free()"

     * "PyObject_GC_NewVar"

     * "PyType_GenericAlloc()"

     * "tp_alloc"

PyObject _Py_NoneStruct

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

也參考:

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


被棄用的別名
============

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

+----------------------------------------------------+----------------------------------------------------+
| 已棄用的別名                                       | 函式                                               |
|====================================================|====================================================|
| 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()"                                  |
+----------------------------------------------------+----------------------------------------------------+
