Una referencia normal mantiene vivo el objeto. weakref permite observarlo sin impedir su recolección cuando desaparecen las referencias fuertes. Resulta útil en cachés, registros y asociaciones auxiliares.

from weakref import WeakValueDictionary

class Image:
    def __init__(self, path: str) -> None:
        self.path = path

cache: WeakValueDictionary[str, Image] = WeakValueDictionary()
image = Image("cover.png")
cache[image.path] = image
assert cache["cover.png"] is image

Cómo usarlo con seguridad

No todos los tipos admiten referencias débiles. Una entrada puede desaparecer entre operaciones, así que obtén el valor una vez y comprueba el resultado. No uses weakref como sustituto de una política explícita de caché con límites y expiración.

Para reforzar la base, consulta guía de collections en Python y guía de type hints.

La documentación oficial de Python, consultada el 22 de julio de 2026, describe la API, los casos límite y la compatibilidad entre versiones.