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-DivesModulul 5 · Arhitectură și revizuire a coduluiReferințe slabe și finalizatoripredict70 / 161
+125 XP
Sarcină
📝 **Întrebare:** Preziceți rezultatul exact. Două instanțe de \`Connection\` au fiecare un apel invers \`weakref.finalize\` care adaugă \`"closed:<name>"\` la un jurnal când obiectul este GC. Șoferul: (1) verifică lungimea jurnalului, (2) șterge c1 + forțează GC, (3) șterge c2 + forțează GC. Când se declanșează apelurile și în ce ordine? 📋 Alegeți răspunsul potrivit. 💡 **Sugestie:** Recitiți teoria de mai sus dacă nu sunteți sigur.
Prezice ieșirea

Citește codul cu atenție

import weakref
import gc

log = []


class Connection:
    def __init__(self, name):
        self.name = name


def cleanup(name):
    log.append(f"closed:{name}")


c1 = Connection("a")
c2 = Connection("b")
weakref.finalize(c1, cleanup, c1.name)
weakref.finalize(c2, cleanup, c2.name)

print(f"alive:{len(log)}")
del c1
gc.collect()
print(f"after_c1:{log}")
del c2
gc.collect()
print(f"after_c2:{log}")

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…