Ugrás a fő tartalomra
🔒 Előnézet mód. Az első tizenöt Foundations lecke ingyenes; ez Pro. Indíts 7 napos trial-t, hogy feloldd a szerkesztőt, az AI tippeket és a tananyag többi részét. Kártya szükséges, bármikor lemondhatod a Dashboard-ban.7 napos trial indítása →
← KurzusokSenior Deep-DivesModule 4 · Memory + profiling · RecapMemóriaszivárgás: ciklusok és gyenge refpredict98 / 161
+100 XP
Feladat
📝 **Feladat:** A pontos kimenet előrejelzése. Két "csomópont" példány egymásra mutat ("a.peer = b", "b.peer = a") – egy újraszámlálási ciklus. A `gc.disable()` leállítja a ciklusgyűjtőt. A "del a" + "del b" után mindegyik újraszámlálása továbbra is 1 (a társtól), így egyik sem hal meg. Csak a `gc.collect()` találja meg és szakítja meg a ciklust, kiváltva mindkét véglegesítési visszahívást. 📋 Valósítsa meg a fenti funkciót. A tesztek automatikusan futnak. 💡 **Tipp:** Ha elakad, olvassa el újra az elméletet.
Találd ki a kimenetet

Olvasd el a kódot figyelmesen

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

Mit ír ki a program? Írd ide:

💬 Beszélgetés

Légy az első — tegyél fel kérdést vagy oszd meg egy tippet.
Jelentkezz be hogy csatlakozz a beszélgetéshez. Az olvasás ingyenes.
Beszélgetés betöltése…