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-DivesModuł 5 · Przegląd architektury i koduSłabe referencje i finalizatorypredict70 / 161
+125 XP
Zadanie
📝 **Pytanie:** Przewiduj dokładny wynik. Każda z dwóch instancji \`Connection\` ma wywołanie zwrotne \`weakref.finalize\`, które dołącza \`"zamknięte:<nazwa>"\` do dziennika, gdy obiekt jest GC. Sterownik: (1) sprawdza długość kłody, (2) usuwa c1 + wymusza GC, (3) usuwa c2 + wymusza GC. Kiedy wywołania zwrotne są uruchamiane i w jakiej kolejności? 📋 Wybierz właściwą odpowiedź. 💡 **Wskazówka:** Jeśli nie jesteś pewien, przeczytaj ponownie powyższą teorię.
Przewiduj wynik

Przeczytaj kod uważnie

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}")

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…