# 在堆上分配对象

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 对象。 f未在该 Python 对象标头中定义的字段不会被初始化。 调用方将拥有对该对象的唯一引用（即引用计数将为 1）。 内存分配的大小由类型对象的 `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`) 个字段。 这对于实现像元组这样能够在构造时确定其大小的对象来说很有用。 将字段数组嵌入到相同的内在分配中可减少内存分配的次数，这提高了内存管理效率。

  请注意如果 typeobj 设置了 `Py_TPFLAGS_HAVE_GC` 则此函数将不适用。 对于这样的对象，请改用 `PyObject_GC_NewVar()`。

void PyObject_Del(void *op)

  释放使用 `PyObject_New` 或 `PyObject_NewVar` 分配给一个对象的内存。 这通常由在对象的类型中指定的 `tp_dealloc` 处理器来调用。 在此调用之后该对象中的字段不应再被访问因为原来的内存已不再是一个有效的 Python 对象。

PyObject _Py_NoneStruct

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

参见

模块对象

  分配内存和创建扩展模块