Vai al contenuto principale
🔒 Modalità anteprima. Le prime quindici lezioni di Foundations sono gratuite; questa è Pro. Avvia un trial di 7 giorni per sbloccare l'editor, i suggerimenti AI e il resto del programma. Carta richiesta, disdici in qualsiasi momento dalla Dashboard.Avvia trial di 7 giorni →
← CorsiSenior Deep-DivesModule 4 · Memory + profiling · RecapPerdite di memoria: cicli e debolerefpredict98 / 161
+100 XP
Compito
📝 **Compito:** Prevedere l'output esatto. Due istanze di `Node` puntano l'una verso l'altra (`a.peer = b`, `b.peer = a`) — un ciclo di conteggio dei riferimenti. `gc.disable()` arresta il raccoglitore di cicli. Dopo `del a` + `del b`, il conteggio di ciascuno è ancora 1 (dal peer), quindi nessuno dei due muore. Solo `gc.collect()` trova e interrompe il ciclo, attivando entrambi i callback di finalizzazione. 📋 Implementa la funzione sopra. I test vengono eseguiti automaticamente. 💡 **Suggerimento:** Rileggi la teoria se rimani bloccato.
Predici output

Leggi il codice attentamente

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

Cosa stamperà il programma? Scrivi qui:

💬 Discussione

Sii il primo a fare una domanda o condividere un consiglio.
Accedi per partecipare alla discussione. La lettura è gratuita.
Caricamento discussione…