Aller au contenu principal
🔒 Mode aperçu. Les quinze premières leçons Foundations sont gratuites ; celle-ci est Pro. Démarrez un trial de 7 jours pour débloquer l'éditeur, les conseils AI et le reste du programme. Carte requise, annulez à tout moment dans Dashboard.Démarrer le trial de 7 jours →
← CoursSenior Deep-DivesModule 4 · Memory + profiling · RecapFuites de mémoire : cycles et référence faiblepredict98 / 161
+100 XP
Tâche
📝 **Tâche :** Prédisez le résultat exact. Deux instances `Node` pointent l'une vers l'autre (`a.peer = b`, `b.peer = a`) — un cycle de refcount. `gc.disable()` arrête le collecteur de cycles. Après `del a` + `del b`, le refcount de chacun est toujours 1 (de l'homologue), donc aucun des deux ne meurt. Seul `gc.collect()` trouve et interrompt le cycle, déclenchant les deux rappels de finalisation. 📋 Implémentez la fonction ci-dessus. Les tests s'exécutent automatiquement. 💡 **Indice :** Relisez la théorie si vous êtes bloqué.
Prédis la sortie

Lis le code attentivement

import gc
import weakref

deaths = []


def watcher(name):
    deaths.append(name)


class Node:
    def __init__(self, name):
        self.name = name
        self.peer = None


a = Node("a")
b = Node("b")
a.peer = b
b.peer = a
weakref.finalize(a, watcher, "a")
weakref.finalize(b, watcher, "b")

gc.disable()
del a
del b
print(f"after_del:{deaths}")

gc.collect()
print(f"after_gc:{sorted(deaths)}")
gc.enable()

Que va afficher le programme ? Écris ici :

💬 Discussion

Soyez le premier à poser une question ou partager une astuce.
Connectez-vous pour rejoindre la discussion. La lecture est gratuite.
Chargement de la discussion…