Objetos de referencia débil
***************************

Python soporta *referencias débiles* como objetos de primera clase.
Hay dos tipos de objetos específicos que implementan directamente
referencias débiles. El primero es un objeto con referencia simple, y
el segundo actúa como un proxy del objeto original tanto como pueda.

int PyWeakref_Check(ob)

   Retorna verdadero (true) si *ob* es una referencia o un objeto
   proxy. Esta función siempre finaliza con éxito.

int PyWeakref_CheckRef(ob)

   Retorna verdadero (true) si *ob* es un objeto de referencia. Esta
   función siempre finaliza con éxito.

int PyWeakref_CheckProxy(ob)

   Retorna verdadero (true) si *ob* es un objeto proxy. Esta función
   siempre finaliza con éxito.

PyObject* PyWeakref_NewRef(PyObject *ob, PyObject *callback)
    *Return value: New reference.*

   Retorna un objeto de referencia débil para el objeto *ob*. Esto
   siempre retornará una nueva referencia, pero no garantiza la
   creación de un objeto nuevo; un objeto de referencia ya existente
   puede ser retornado. El segundo parámetro, *callback*, puede ser un
   objeto invocable que recibe una notificación cuando *ob* es
   recolectado como basura; debe aceptar un solo parámetro, el cual
   será el mismo objeto de referencia débil. *callback* también puede
   ser "None" o "NULL". Si *ob* no es un objeto que puede ser referido
   de forma débil, o si *callback* no es invocable, "None", o "NULL",
   esto retornará "NULL"  y causará un "TypeError".

PyObject* PyWeakref_NewProxy(PyObject *ob, PyObject *callback)
    *Return value: New reference.*

   Retorna un objeto proxy de referencia débil para el objeto *ob*.
   Esto siempre retornará una nueva referencia, pero no garantiza la
   creación de un objeto nuevo; un objeto proxy de referencia ya
   existente puede ser retornado. El segundo parámetro, *callback*,
   puede ser un objeto invocable que recibe una notificación cuando
   *ob* es recolectado como basura; debe aceptar un solo parámetro, el
   cual será el mismo objeto de referencia débil. *callback* también
   puede ser "None" o "NULL". Si *ob* no es un objeto que puede ser
   referido de forma débil, o si *callback* no es invocable, "None", o
   "NULL", esto retornará "NULL"  y causará un "TypeError".

PyObject* PyWeakref_GetObject(PyObject *ref)
    *Return value: Borrowed reference.*

   Retorna el objeto referenciado desde una referencia débil, *ref*.
   Si el referente no está vivo, retornará "Py_None".

   Nota:

     Esta función retorna una  *referencia prestada* al objeto
     referenciado. Esto significa que siempre debes llamar
     "Py_INCREF()" en el objeto excepto si sabes que no puede ser
     destruido mientras lo estés usando.

PyObject* PyWeakref_GET_OBJECT(PyObject *ref)
    *Return value: Borrowed reference.*

   Similar a "PyWeakref_GetObject()", pero implementado como un macro
   que no verifica errores.
