Перейти к основному содержимому
🔒 Режим превью. Первые 15 уроков 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` счетчик ссылок каждого из них по-прежнему равен 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()

Что выведет программа? Напиши здесь:

💬 Обсуждение

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