Будет выведено [1], затем [1, 2]. Оба вызова без второго аргумента изменяют один общий список по умолчанию.
Какой будет вывод программы при добавлении элементов в список?
Будет выведено [1], затем [1, 2]. Оба вызова без второго аргумента изменяют один общий список по умолчанию.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Каким будет результат, напечатанный в консоль, и почему так происходит? Функция принимает элемент и список, у которого в качестве значения по умолчанию используется пустой список, после чего добавляет элемент в этот список и возвращает его.
def add_item_to_list(elem, lst=[]):
lst.append(elem)
return lst
print(add_item_to_list(1))
print(add_item_to_list(2))
Ответ
Будет выведено [1], затем [1, 2]. Оба вызова без второго аргумента изменяют один общий список по умолчанию.
Пустой список в объявлении функции создаётся единожды. Первый вызов добавляет 1 и печатает текущее содержимое; второй добавляет 2 к тому же объекту.
[1]
[1, 2]
Чтобы каждый вызов без списка создавал независимый результат:
def add_item_to_list(elem, lst=None):
if lst is None:
lst = []
lst.append(elem)
return lst
Нельзя заменять проверку на if not lst, если нужно сохранить поведение для явно переданного пустого списка. При передаче списка его изменение на месте остаётся частью контракта.