Preskoči na glavni sadržaj
🔒 Način pregleda. Prvih petnaest Foundations lekcija je besplatno; ova je Pro. Pokrenite 7-dnevni trial da otključate editor, AI savjete i ostatak programa. Kartica obavezna, otkažite bilo kada u Dashboard.Pokreni 7-dnevni trial →
← KolegijiSenior Deep-DivesModule 4 · Memory + profiling · RecapCurenje memorije: ciklusi i slabi refpredict98 / 161
+100 XP
Zadatak
📝 **Zadatak:** Predvidite točan rezultat. Dvije instance `Node` pokazuju jedna na drugu (`a.peer = b`, `b.peer = a`) — ciklus brojanja referenci. `gc.disable()` zaustavlja sakupljač ciklusa. Nakon `del a` + `del b`, refcount svakog od njih i dalje je 1 (od ravnopravnog) tako da niti jedan ne umire. Samo `gc.collect()` pronalazi i prekida ciklus, pokrećući oba finalizirajuća povratna poziva. 📋 Implementirajte gornju funkciju. Testovi se pokreću automatski. 💡 **Savjet:** Ponovno pročitajte teoriju ako zapnete.
Predvidi izlaz

Pažljivo pročitaj kod

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

Što će program ispisati? Napiši ovdje:

💬 Rasprava

Budi prvi — postavi pitanje ili podijeli savjet.
Prijavi se kako bi se pridružio raspravi. Čitanje je besplatno.
Učitavanje rasprave…