Что выведет код Middle Память и производительность обновлено
del и время жизни объекта
Вопрос
Что выведет код? По строке на каждый print.
class Res:
def __init__(self, name):
self.name = name
def __del__(self):
print('free', self.name)
a = Res('a')
b = a
del a
print('after del a')
b = None
print('after b = None')
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: after del a, free a, after b = None. del a убирает одно имя, но объект ещё держит b, поэтому он жив.
Что выведет
after del a
free a
after b = None
Разбор
del a убирает одно имя, но объект ещё держит b, поэтому он жив. Когда b перепривязали к None, счётчик ссылок стал нулём, и CPython сразу вызвал __del__. В других реализациях Python момент вызова может отличаться.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Память и производительность»
- Встроенные функции против ручного цикла
- Пересечение больших списков id
- Числа Фибоначчи без экспоненты
- Скользящая медиана потока на двух кучах
- Найти пару с суммой быстрее O(n²)
- Циклические ссылки и gc
- Управление памятью в CPython
- Инструменты профилирования Python