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

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

💬 Дискусия

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