Zum Hauptinhalt springen
🔒 Vorschaumodus. Die ersten fünfzehn Foundations-Lektionen sind kostenlos; diese hier ist Pro. Starte einen 7-Tage-Trial, um den Editor, AI-Hinweise und den Rest des Lehrplans freizuschalten. Karte erforderlich, jederzeit im Dashboard kündbar.7-Tage-Trial starten →
← KurseSenior Deep-DivesModule 4 · Memory + profiling · RecapSpeicherlecks: Zyklen und schwache Refpredict98 / 161
+100 XP
Aufgabe
📝 **Aufgabe:** Die genaue Ausgabe vorhersagen. Zwei „Node“-Instanzen zeigen aufeinander („a.peer = b“, „b.peer = a“) – ein Refcount-Zyklus. `gc.disable()` stoppt den Zykluskollektor. Nach „del a“ + „del b“ ist der Refcount von jedem immer noch 1 (vom Peer), sodass keiner stirbt. Nur „gc.collect()“ findet und durchbricht den Zyklus und löst beide Finalisierungsrückrufe aus. 📋 Implementieren Sie die obige Funktion. Tests laufen automatisch ab. 💡 **Hinweis:** Lesen Sie die Theorie noch einmal, wenn Sie nicht weiterkommen.
Sage die Ausgabe vorher

Lies den Code sorgfältig

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()

Was wird das Programm ausgeben? Schreib hier:

💬 Diskussion

Sei der erste — stelle eine Frage oder teile einen Tipp.
Anmelden um an der Diskussion teilzunehmen. Lesen ist kostenlos.
Diskussion wird geladen…