弱引用对象
**********

Python 支持 “弱引用” 作为一类对象。具体来说，有两种直接实现弱引用的对
象。第一种就是简单的引用对象，第二种尽可能地作用为一个原对象的代理。

int PyWeakref_Check(PyObject *ob)

   如果 *ob* 是一个引用或代理对象则返回非零值。 此函数总是会成功执行。

int PyWeakref_CheckRef(PyObject *ob)

   如果 *ob* 是一个引用对象或引用类型的子类则返回非零值。 此函数总是会
   成功执行。

int PyWeakref_CheckRefExact(PyObject *ob)

   如果 *ob* 是一个引用对象，但不是引用类型的子类则返回非零值。 此函数
   总是会成功执行。

int PyWeakref_CheckProxy(PyObject *ob)

   如果 *ob* 是一个代理对象则返回非零值。 此函数总是会成功执行。

PyObject *PyWeakref_NewRef(PyObject *ob, PyObject *callback)
    *返回值：新的引用。** 属于 稳定 ABI.*

   返回对象 *ob* 的弱引用对象。 该函数总是会返回一个新的引用，但不保证
   创建一个新的对象；它有可能返回一个现有的引用对象。 第二个形参
   *callback* 可以是一个可调用对象，它会在 *ob* 被作为垃圾回收时接收通
   知；它应当接受一个单独形参，即弱引用对象本身。 *callback* 也可以是
   "None" 或 "NULL"。 如果 *ob* 不是一个弱引用对象，或者如果
   *callback* 不是可调用对象, "None" 或 "NULL"，该函数将返回 "NULL" 并
   引发 "TypeError"。

   参见: "PyType_SUPPORTS_WEAKREFS()" 用于检测 *ob* 是否可被弱引用。

PyObject *PyWeakref_NewProxy(PyObject *ob, PyObject *callback)
    *返回值：新的引用。** 属于 稳定 ABI.*

   返回对象 *ob* 的弱引用代理对象。 该函数总是会返回一个新的引用，但不
   保证创建一个新的对象；它有可能返回一个现有的代理对象。 第二个形参
   *callback* 可以是一个可调用对象，它会在 *ob* 被作为垃圾回收时接收通
   知；它应当接受一个单独形参，即弱引用对象本身。 *callback* 也可以是
   "None" 或 "NULL"。 如果 *ob* 不是一个弱引用对象，或者如果
   *callback* 不是可调用对象, "None" 或 "NULL"，该函数将返回 "NULL" 并
   引发 "TypeError"。

   参见: "PyType_SUPPORTS_WEAKREFS()" 用于检测 *ob* 是否可被弱引用。

int PyWeakref_GetRef(PyObject *ref, PyObject **pobj)
    * 属于 稳定 ABI 自 3.13 版起.*

   基于一个弱引用 *ref* 获取一个指向被引用对象的 *strong reference* 存
   入到 **pobj*。

   * 成功时，将 **pobj* 设为一个新的指向被引用对象的 *strong
     reference* 并返回 1。

   * 如果引用不可用，则将 **pobj* 设为 "NULL" 并返回 0。

   * 发生错误时，将引发异常并返回 -1。

   Added in version 3.13.

PyObject *PyWeakref_GetObject(PyObject *ref)
    *返回值：借入的引用。** 属于 稳定 ABI.*

   基于一个弱引用 *ref* 返回一个指向被引用对象的 *borrowed reference*
   。 如果引用已不可用，则返回 "Py_None"。

   备注:

     该函数返回被引用对象的一个 *borrowed reference*。 这意味着应该总
     是在该对象上调用 "Py_INCREF()"，除非是当它在借入引用的最后一次被
     使用之前无法被销毁的时候。

   从 3.13 版起已弃用，将在 3.15 版中移除: 请改用 "PyWeakref_GetRef()"
   。

PyObject *PyWeakref_GET_OBJECT(PyObject *ref)
    *返回值：借入的引用。*

   类似于 "PyWeakref_GetObject()"，但是不带错误检测。

   从 3.13 版起已弃用，将在 3.15 版中移除: 请改用 "PyWeakref_GetRef()"
   。

int PyWeakref_IsDead(PyObject *ref)

   测试弱引用 *ref* 是否已死亡。 如果该引用已死亡则返回 1，如果仍存活
   则返回 0，如果 *ref* 不是弱引用对象则返回 -1 并设置一个错误。

   Added in version 3.14.

void PyObject_ClearWeakRefs(PyObject *object)
    * 属于 稳定 ABI.*

   此函数将被 "tp_dealloc" 处理器调用以清空弱引用。

   此函数将迭代 *object* 的弱引用并调用这些引用中可能存在的回调。 它将
   在尝试了所有回调之后返回。

void PyUnstable_Object_ClearWeakRefsNoCallbacks(PyObject *object)

   *这是 不稳定 API。它可在次发布版中不经警告地改变。*

   清空 *object* 的弱引用而不调用回调。

   此函数将由 "tp_dealloc" 处理器针对带有终结器 (即 "__del__()") 的类
   型进行调用。 针对这些对象的处理器会先调用
   "PyObject_ClearWeakRefs()" 来清空弱引用并调用其回调，然后调用终结器
   ，最后调用此函数来清空终结器可能创建的任何弱引用。

   在大多数情况下，更适当的做法是使用 "PyObject_ClearWeakRefs()" 而不
   是此函数来清空弱引用。

   Added in version 3.13.
