在堆上分配对象
**************

PyObject *_PyObject_New(PyTypeObject *type)
    *返回值：新的引用。*

PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)
    *返回值：新的引用。*

PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)
    *返回值：借入的引用。** 属于 稳定 ABI.*

   为新分配的对象 *op* 初始化它的类型和初始引用。 返回初始化后的对象。
   对象的其他字段不会被初始化。 虽然被如此命名，但该函数与对象的
   "__init__()" 方法 ("tp_init" 槽位) 无关。 具体而言，该函数 **不会**
   调用对象的 "__init__()" 方法。

   总而言之，可将该函数视为一个低层级的例程。 如有可能请使用
   "tp_alloc"。 要为你的类型实现 "tp_alloc"，推荐使用
   "PyType_GenericAlloc()" 或 "PyObject_New()"。

   备注:

     该函数只初始化与初始 "PyObject" 结构体相对应的对象内存。 它不会为
     其余内存写入零值。

PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)
    *返回值：借入的引用。** 属于 稳定 ABI.*

   它的功能和 "PyObject_Init()" 一样，并且会初始化变量大小对象的长度信
   息。

   备注:

     该函数只初始化对象的部分内存。 它不会为其余内存写入零值。

PyObject_New(TYPE, typeobj)

   通过调用 "PyObject_Malloc()" 分配内存并如 "PyObject_Init()" 那样将
   其初始化分配一个使用 C 结构类型 *TYPE* 和 Python 类型对象 *typeobj*
   ("PyTypeObject*") 的新 Python 对象。 调用方将拥有对该对象的唯一引用
   （即其引用计数将为一）。

   请避免直接调用此函数为对象分配内存；而应调用类型的 "tp_alloc" 槽位
   。

   在填充类型的 "tp_alloc" 槽位时，推荐使用 "PyType_GenericAlloc()" 而
   不是使用简单调用此宏的自定义函数。

   这个宏不会调用 "tp_alloc", "tp_new" ("__new__()") 或 "tp_init"
   ("__init__()")。

   这不能被用于在 "tp_flags" 中设置了 "Py_TPFLAGS_HAVE_GC" 的对象；请
   改用 "PyObject_GC_New"。

   由此宏分配的内存必须用 "PyObject_Free()" 来释放（一般是通过对象的
   "tp_free" 槽位进行调用）。

   备注:

     返回的内存并不保证在其初始化之前被完全置为零值。

   备注:

     此宏并不会构造给定类型的完全初始化的对象；它只是分配内存并准备好
     由 "tp_init" 来进一步初始化。 要构造完全初始化的对象，应改为调用
     *typeobj*。 例如:

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

   参见:

     * "PyObject_Free()"

     * "PyObject_GC_New"

     * "PyType_GenericAlloc()"

     * "tp_alloc"

PyObject_NewVar(TYPE, typeobj, size)

   如 "PyObject_New" 异常：

   * 它将分配足够容纳 *TYPE* 结构加上由 *typeobj* 的 "tp_itemsize" 字
     段所给出的大小的 *size* ("Py_ssize_t") 个字段的内存。

   * 该内存将像 "PyObject_InitVar()" 一样被初始化。

   这适用于实现像元组那样的对象，它能够在构造时确定其大小。 通过将字段
   数组嵌入到同样的分配块减去分配块数量，提高了内存管理效率。

   请避免直接调用此函数为对象分配内存；而应调用类型的 "tp_alloc" 槽位
   。

   在填充类型的 "tp_alloc" 槽位时，推荐使用 "PyType_GenericAlloc()" 而
   不是使用简单调用此宏的自定义函数。

   这不能被用于在 "tp_flags" 中设置了 "Py_TPFLAGS_HAVE_GC" 的对象；请
   改用 "PyObject_GC_NewVar"。

   由此函数分配的内存必须用 "PyObject_Free()" 来释放（一般是通过对象的
   "tp_free" 槽位进行调用）。

   备注:

     返回的内存并不保证在其初始化之前被完全置为零值。

   备注:

     此宏并不会构造给定类型的完全初始化的对象；它只是分配内存并准备好
     由 "tp_init" 来进一步初始化。 要构造完全初始化的对象，应改为调用
     *typeobj*。 例如:

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

   参见:

     * "PyObject_Free()"

     * "PyObject_GC_NewVar"

     * "PyType_GenericAlloc()"

     * "tp_alloc"

PyObject _Py_NoneStruct

   这个对象是像 "None" 一样的 Python 对象。它可以使用 "Py_None" 宏访问
   ，该宏的拿到指向该对象的指针。

参见:

  模块对象
     分配内存和创建扩展模块


一些已被弃用的别名
==================

这些是现有函数和宏的已处于 *soft deprecated* 状态的别名。 它们的存在只
是为了向下兼容。

+----------------------------------------------------+----------------------------------------------------+
| 已弃用的别名                                       | 函数                                               |
|====================================================|====================================================|
| 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()"                                  |
+----------------------------------------------------+----------------------------------------------------+
