Перейти до основного вмісту
🔒 Режим прев'ю. Перші 15 уроків Foundations — безкоштовні; цей — Pro. Запусти 7-денний trial щоб відкрити редактор, AI-підказки і решту курсу. Потрібна картка, скасування в Dashboard у будь-який момент.Почати 7-денний trial →
← КурсиSenior Deep-DivesМодуль 5 · Огляд архітектури та кодуСлабкі посилання та фіналізаториpredict70 / 161
+125 XP
Завдання
📝 **Питання:** Спрогнозуйте точний результат. Кожен з двох екземплярів \`Connection\` має зворотний виклик \`weakref.finalize\`, який додає \`"closed:<name>"\` до журналу, коли об’єкт збирається GC. Драйвер: (1) перевіряє довжину журналу, (2) видаляє c1 + форсує GC, (3) видаляє c2 + форсує GC. Коли спрацьовують зворотні виклики та в якому порядку? 📋 Виберіть правильну відповідь. 💡 **Підказка:** Перечитайте наведену вище теорію, якщо не впевнені.
Передбач вивід

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

import weakref
import gc

log = []


class Connection:
    def __init__(self, name):
        self.name = name


def cleanup(name):
    log.append(f"closed:{name}")


c1 = Connection("a")
c2 = Connection("b")
weakref.finalize(c1, cleanup, c1.name)
weakref.finalize(c2, cleanup, c2.name)

print(f"alive:{len(log)}")
del c1
gc.collect()
print(f"after_c1:{log}")
del c2
gc.collect()
print(f"after_c2:{log}")

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

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

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