Sari la conținutul principal
🔒 Mod previzualizare. Primele cincisprezece lecții Foundations sunt gratuite; aceasta este Pro. Pornește un trial de 7 zile pentru a debloca editorul, sugestiile AI și restul programului. Card necesar, anulează oricând în Dashboard.Pornește trial de 7 zile →
← CursuriSenior Deep-DivesModule 4 · Memory + profiling · RecapScurgeri de memorie: cicluri și ref. slabăpredict98 / 161
+100 XP
Sarcină
📝 **Sarcina:** Preziceți rezultatul exact. Două instanțe „Node” se îndreaptă unul către celălalt (‘a.peer = b`, `b.peer = a`) — un ciclu de refcount. `gc.disable()` oprește colectorul de cicluri. După `del a` + `del b`, refcount-ul fiecăruia este încă 1 (de la egal), așa că niciunul nu moare. Doar `gc.collect()` găsește și întrerupe ciclul, declanșând ambele apeluri de finalizare. 📋 Implementați funcția de mai sus. Testele rulează automat. 💡 **Sugestie:** Recitiți teoria dacă rămâneți blocat.
Prezice ieșirea

Citește codul cu atenție

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

Ce va afișa programul? Scrie aici:

💬 Discuție

Fii primul — pune o întrebare sau împărtășește un sfat.
Conectează-te pentru a te alătura discuției. Citirea este gratuită.
Se încarcă discuția…