Conteo de referencias

The functions and macros in this section are used for managing reference counts of Python objects.

Py_ssize_t Py_REFCNT(PyObject *o)

Get the reference count of the Python object o.

Use the Py_SET_REFCNT() function to set an object reference count.

Distinto en la versión 3.11: The parameter type is no longer const PyObject*.

Distinto en la versión 3.10: Py_REFCNT() is changed to the inline static function.

void Py_SET_REFCNT(PyObject *o, Py_ssize_t refcnt)

Set the object o reference counter to refcnt.

Nuevo en la versión 3.9.

void Py_INCREF(PyObject *o)

Incrementar el recuento de referencia para el objeto o.

Esta función se usa generalmente para convertir un borrowed reference en un strong reference en su lugar. La función Py_NewRef() se puede utilizar para crear un nuevo strong reference.

El objeto no debe ser NULL; si no está seguro de que no sea NULL, use Py_XINCREF().

void Py_XINCREF(PyObject *o)

Incrementa el conteo de referencia para el objeto o. El objeto puede ser NULL, en cuyo caso el macro no tiene efecto.

Ver también Py_XNewRef().

PyObject *Py_NewRef(PyObject *o)
Part of the Stable ABI since version 3.10.

Crea un nuevo strong reference a un objeto: incrementa el recuento de referencias del objeto o y retorna el objeto o.

Cuando el strong reference ya no sea necesario Py_DECREF() debe ser llamado para disminuir el recuento de referencias del objeto.

El objeto o no debe ser NULL; use Py_XNewRef() si o puede ser NULL.

Por ejemplo:

Py_INCREF(obj);
self->attr = obj;

puede ser escrito como:

self->attr = Py_NewRef(obj);

Ver también Py_INCREF().

Nuevo en la versión 3.10.

PyObject *Py_XNewRef(PyObject *o)
Part of the Stable ABI since version 3.10.

Similar a Py_NewRef(), pero el objeto o puede ser NULL.

Si el objeto o es NULL, la función solo retorna NULL.

Nuevo en la versión 3.10.

void Py_DECREF(PyObject *o)

Decrementa el conteo de referencia para el objeto o.

Si el recuento de referencias llega a cero, se invoca la función de desasignación del tipo de objeto (que no debe ser NULL).

Esta función se usa generalmente para eliminar un strong reference antes de salir de su alcance.

El objeto no debe ser NULL; si no está seguro de que no sea NULL, use Py_XINCREF().

Advertencia

La función de desasignación puede hacer que se invoque un código arbitrario de Python (por ejemplo, cuando se desasigna una instancia de clase con un método __del__()). Si bien las excepciones en dicho código no se propagan, el código ejecutado tiene acceso libre a todas las variables globales de Python. Esto significa que cualquier objeto al que se pueda acceder desde una variable global debe estar en un estado coherente antes de invocar Py_DECREF(). Por ejemplo, el código para eliminar un objeto de una lista debe copiar una referencia al objeto eliminado en una variable temporal, actualizar la estructura de datos de la lista y luego llamar a Py_DECREF() para la variable temporal.

void Py_XDECREF(PyObject *o)

Disminuye el conteo de referencia para el objeto o. El objeto puede ser NULL, en cuyo caso el macro no tiene efecto; de lo contrario, el efecto es el mismo que para Py_DECREF(), y se aplica la misma advertencia.

void Py_CLEAR(PyObject *o)

Disminuye el conteo de referencia para el objeto o. El objeto puede ser NULL, en cuyo caso el macro no tiene efecto; de lo contrario, el efecto es el mismo que para Py_DECREF(), excepto que el argumento también se establece en NULL. La advertencia para Py_DECREF() no se aplica con respecto al objeto pasado porque el macro usa cuidadosamente una variable temporal y establece el argumento en NULL antes de disminuir su conteo de referencia.

Es una buena idea usar este macro siempre que disminuya el conteo de referencia de un objeto que pueda atravesarse durante la recolección de basura.

Distinto en la versión 3.12: The macro argument is now only evaluated once. If the argument has side effects, these are no longer duplicated.

void Py_IncRef(PyObject *o)
Part of the Stable ABI.

Incrementa el conteo de referencias para objeto o. Una versión de la función Py_XINCREF(). Puede utilizarse para la integración dinámica en tiempo de ejecución de Python.

void Py_DecRef(PyObject *o)
Part of the Stable ABI.

Disminuye el conteo de referencias del objeto o. Una versión de la función Py_XDECREF(). Puede utilizarse para la integración dinámica en tiempo de ejecución de Python.

Py_SETREF(dst, src)

Macro safely decrementing the dst reference count and setting dst to src.

As in case of Py_CLEAR(), «the obvious» code can be deadly:

Py_DECREF(dst);
dst = src;

The safe way is:

Py_SETREF(dst, src);

That arranges to set dst to src _before_ decrementing reference count of dst old value, so that any code triggered as a side-effect of dst getting torn down no longer believes dst points to a valid object.

Nuevo en la versión 3.6.

Distinto en la versión 3.12: The macro arguments are now only evaluated once. If an argument has side effects, these are no longer duplicated.

Py_XSETREF(dst, src)

Variant of Py_SETREF macro that uses Py_XDECREF() instead of Py_DECREF().

Nuevo en la versión 3.6.

Distinto en la versión 3.12: The macro arguments are now only evaluated once. If an argument has side effects, these are no longer duplicated.