Перейти до основного вмісту
🔒 Режим прев'ю. Перші 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()` знаходить і розриває цикл, запускаючи обидва зворотні виклики finalize. 📋 Реалізуйте наведену вище функцію. Тести запускаються автоматично. 💡 **Підказка:** Перечитайте теорію, якщо ви застрягли.
Передбач вивід

Прочитай код уважно

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

Що виведе програма? Напиши тут:

💬 Обговорення

Будьте першим — поставте запитання або поділіться порадою.
Увійдіть щоб приєднатися до обговорення. Читання безкоштовне.
Завантаження обговорення…