Prejsť na hlavný obsah
🔒 Režim náhľadu. Prvých pätnásť lekcií Foundations je zadarmo; táto je Pro. Spustite 7-dňový trial pre odomknutie editora, AI nápovied a zvyšku kurzu. Karta vyžadovaná, zrušte kedykoľvek v Dashboard.Spustiť 7-dňový trial →
← KurzySenior Deep-DivesModule 4 · Memory + profiling · RecapÚniky pamäte: cykly a slabé refpredict98 / 161
+100 XP
Úloha
📝 **Úloha:** Predpovedajte presný výstup. Dve inštancie uzla smerujú na seba („a.peer = b“, „b.peer = a“) – cyklus prepočítania. `gc.disable()` zastaví zberač cyklov. Po `del a` + `del b` je prepočet každého z nich stále 1 (od partnera), takže ani jeden nezomrie. Iba `gc.collect()` nájde a preruší cyklus, čím spustí obe finalizačné spätné volania. 📋 Implementujte funkciu vyššie. Testy prebiehajú automaticky. 💡 **Tip:** Znova si prečítajte teóriu, ak sa zaseknete.
Predpovedz výstup

Prečítaj kód pozorne

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

Čo program vypíše? Napíš sem:

💬 Diskusia

Buď prvý — polož otázku alebo sa podeľ o tip.
Prihlás sa aby si sa zapojil do diskusie. Čítanie je zadarmo.
Načítava sa diskusia…