Přejít k hlavnímu obsahu
🔒 Režim náhledu. Prvních patnáct lekcí Foundations je zdarma; tato je Pro. Spusťte 7denní trial pro odemčení editoru, AI nápověd a zbytku kurzu. Karta vyžadována, zrušte kdykoli v Dashboard.Spustit 7denní trial →
← KurzySenior Deep-DivesModule 4 · Memory + profiling · RecapÚniky paměti: cykly a slabé referencepredict98 / 161
+100 XP
Úkol
📝 **Úkol:** Předpovězte přesný výstup. Dvě instance `Node` ukazují na sebe (`a.peer = b`, `b.peer = a`) – cyklus přepočítávání. `gc.disable()` zastaví sběrač cyklů. Po `del a` + `del b` je přepočet každého stále 1 (od partnera), takže ani jeden nezemře. Pouze `gc.collect()` najde a přeruší cyklus a spustí obě finalizační zpětná volání. 📋 Implementujte výše uvedenou funkci. Testy probíhají automaticky. 💡 **Tip:** Pokud se zaseknete, přečtěte si znovu teorii.
Předpověz výstup

Přečti kód pozorně

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 program vypíše? Napiš sem:

💬 Diskuze

Buď první — polož otázku nebo se podělej o tip.
Přihlas se abys se zapojil do diskuze. Čtení je zdarma.
Načítání diskuze…