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