Przejdź do treści głównej
🔒 Tryb podglądu. Pierwszych piętnaście lekcji Foundations jest darmowych; ta jest Pro. Rozpocznij 7-dniowy trial, aby odblokować edytor, podpowiedzi AI i resztę kursu. Wymagana karta, anulujesz w dowolnym momencie w Dashboard.Rozpocznij 7-dniowy trial →
← KursySenior Deep-DivesModule 4 · Memory + profiling · RecapWycieki pamięci: cykle i słabe refpredict98 / 161
+100 XP
Zadanie
📝 **Zadanie:** Przewiduj dokładny wynik. Dwie instancje `Node` wskazują na siebie („a.peer = b`, `b.peer = a`) — cykl przeliczania. `gc.disable()` zatrzymuje moduł zbierający cykle. Po `del a` + `del b` przeliczenie każdego z nich nadal wynosi 1 (od partnera), więc żaden nie umiera. Tylko `gc.collect()` znajduje i przerywa cykl, wywołując oba wywołania zwrotne finalizacji. 📋 Zaimplementuj powyższą funkcję. Testy uruchamiają się automatycznie. 💡 **Wskazówka:** Jeśli utkniesz, przeczytaj ponownie teorię.
Przewiduj wynik

Przeczytaj kod uważnie

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

Co wypisze program? Napisz tutaj:

💬 Dyskusja

Zadaj pierwsze pytanie lub podziel się wskazówką.
Zaloguj się aby dołączyć do dyskusji. Czytanie jest darmowe.
Ładowanie dyskusji…