Какой вывод получит программа с функцией, использующей изменяемый параметр по умолчанию?

Вывод: [10, 'a'], затем [123], затем [10, 'a']. list1 и list3 — один общий список по умолчанию, list2 создан отдельно.

Короткий ответ

Что ответить на собеседовании

Вывод: [10, 'a'], затем [123], затем [10, 'a']. list1 и list3 — один общий список по умолчанию, list2 создан отдельно.

Подробный разбор

Ответ с пояснениями

Условие

Определите, что будет выведено в консоль после выполнения приведённого кода. Функция extend_list принимает список в качестве аргумента по умолчанию, что может вызвать неожиданное накопление элементов при повторных вызовах.


def extend_list(value, Lst=[]):
    Lst.append(value)
    return Lst

list1 = extend_list(10)
list2 = extend_list(123, [])
list3 = extend_list('a')

print(list1)
print(list2)
print(list3)

Ответ

Вывод: [10, 'a'], затем [123], затем [10, 'a']. list1 и list3 — один общий список по умолчанию, list2 создан отдельно.

Первый вызов добавляет 10 в default-список. Второй получает явно переданный новый [], поэтому его 123 не влияет на default. Третий снова использует общий список и добавляет 'a'.

assert list1 is list3
assert list1 is not list2

Печать выполняется уже после всех трёх вызовов, поэтому даже list1 содержит позднее добавленный элемент. Чтобы устранить накопление между независимыми вызовами, используйте Lst=None и создавайте новый список внутри при Lst is None. Явно переданный список при этом по-прежнему изменяется.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее