Перейти к основному содержимому
🔒 Режим превью. Первые 15 уроков Foundations — бесплатные; этот — Pro. Запусти 7-дневный trial чтобы открыть редактор, AI-подсказки и остальной курс. Нужна карта, отмена в Dashboard в любой момент.Начать 7-дневный trial →
← КурсыSenior Deep-DivesМодуль 5 · Обзор архитектуры и кодаСлабые ссылки и финализаторыpredict70 / 161
+125 XP
Задание
📝 **Вопрос:** Предскажите точный результат. Каждый из двух экземпляров Connection имеет обратный вызов weakref.finalize, который добавляет «закрыто:<имя>»\` в журнал, когда объект подвергается сборке мусора. Драйвер: (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}")

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

💬 Обсуждение

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