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

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.

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.
