Zum Hauptinhalt springen
🔒 Vorschaumodus. Die ersten fünfzehn Foundations-Lektionen sind kostenlos; diese hier ist Pro. Starte einen 7-Tage-Trial, um den Editor, AI-Hinweise und den Rest des Lehrplans freizuschalten. Karte erforderlich, jederzeit im Dashboard kündbar.7-Tage-Trial starten →
← KurseSenior Deep-DivesModul 5 · Architektur- und CodeüberprüfungSchwache Referenzen und Finalizerpredict70 / 161
+125 XP
Aufgabe
📝 **Frage:** Sagen Sie die genaue Ausgabe voraus. Zwei \`Connection\`-Instanzen verfügen jeweils über einen \`weakref.finalize\`-Rückruf, der \`"closed:<name>"\` an ein Protokoll anhängt, wenn das Objekt einer GC unterzogen wird. Der Treiber: (1) prüft die Protokolllänge, (2) löscht c1 + erzwingt GC, (3) löscht c2 + erzwingt GC. Wann werden die Rückrufe ausgelöst und in welcher Reihenfolge? 📋 Wählen Sie die richtige Antwort. 💡 **Hinweis:** Lesen Sie die obige Theorie noch einmal, wenn Sie sich nicht sicher sind.
Sage die Ausgabe vorher

Lies den Code sorgfältig

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

Was wird das Programm ausgeben? Schreib hier:

💬 Diskussion

Sei der erste — stelle eine Frage oder teile einen Tipp.
Anmelden um an der Diskussion teilzunehmen. Lesen ist kostenlos.
Diskussion wird geladen…