Към основното съдържание
🔒 Режим за преглед. Първите петнадесет урока на Foundations са безплатни; този е Pro. Стартирайте 7-дневен trial, за да отключите редактора, AI подсказките и останалата част от курса. Изисква се карта, отменете по всяко време в Dashboard.Стартирай 7-дневен trial →
← КурсовеSenior Deep-DivesModule 4 · Memory + profiling · RecapИзтичане на памет: цикли и слаба рефpredict98 / 161
+100 XP
Задача
📝 **Задача:** Предскажете точния резултат. Два екземпляра на `Node` сочат един към друг (`a.peer = b`, `b.peer = a`) — цикъл на преброяване. `gc.disable()` спира колектора на цикли. След `del a` + `del b`, refcount на всеки все още е 1 (от партньора), така че нито един не умира. Само `gc.collect()` намира и прекъсва цикъла, задействайки и двете финализирани обратни извиквания. 📋 Приложете функцията по-горе. Тестовете се изпълняват автоматично. 💡 **Съвет:** Прочетете отново теорията, ако се затрудните.
Предскажи изхода

Прочети кода внимателно

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

Какво ще изведе програмата? Напиши тук:

💬 Дискусия

Бъди първи — задай въпрос или сподели съвет.
Влез за да се присъединиш към дискусията. Четенето е безплатно.
Зареждане на дискусията…