source:: [[Variables, scopes et closures en Python - Bibliothèque - Zeste de Savoir]] #s/informatique/langage/python Une solution possible pour libérer la mémoire malgré les [[python références cycliques|références cycliques]]. Le problème des références cycliques provient du fait que le ramasse-miettes ne peut collecter les objets tant qu’ils sont référencés. Une autre manière de le résoudre est alors d’utiliser des références qui n’empêchent pas ce ramasse-miettes de supprimer les valeurs. On les appelle « références faibles » et elles sont fournies en Python par le module [weakref](https://docs.python.org/3/library/weakref.html). Une référence faible est similaire à un appel de fonction qui renvoie l’objet si celui-ci est toujours référencé, ou `None` s’il a été supprimé. ```python >>> import weakref >>> >>> class Obj: ... def __del__(self): ... print('deleting', self) ... >>> >>> obj1 = Obj() >>> obj2 = Obj() >>> obj1.ref = obj2 >>> obj2.ref = weakref.ref(obj1) >>> >>> obj2.ref >>> print(obj2.ref()) <__main__.Obj object at 0x7f8de5d6b128> >>> obj2.ref() is obj1 True >>> >>> del obj1 deleting <__main__.Obj object at 0x7f8de5d6b128> >>> print(obj2.ref()) None ```