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

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.*

   Return a weak reference object for the object *ob*.  This will
   always return a new reference, but is not guaranteed to create a
   new object; an existing reference object may be returned.  The
   second parameter, *callback*, can be a callable object that
   receives notification when *ob* is garbage collected; it should
   accept a single parameter, which will be the weak reference object
   itself. *callback* may also be "None" or "NULL".  If *ob* is not a
   weakly referenceable object, this will raise "TypeError" and return
   "NULL".

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

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

   Return a weak reference proxy object for the object *ob*.  This
   will always return a new reference, but is not guaranteed to create
   a new object; an existing proxy object may be returned.  The second
   parameter, *callback*, can be a callable object that receives
   notification when *ob* is garbage collected; it should accept a
   single parameter, which will be the weak reference object itself.
   *callback* may also be "None" or "NULL".  If *ob* weakly
   referenceable object, this will raise "TypeError" and return
   "NULL".

   参见: "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.
