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

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

int PyWeakref_Check(PyObject *ob)

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

int PyWeakref_CheckRef(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"。

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

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

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

   返回弱引用 *ref* 的被引用对象。 如果被引用对象不再存在，则返回
   "Py_None"。

   备注:

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

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

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

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

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

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