Какой будет вывод программы при добавлении элементов в список?

Будет выведено [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, если нужно сохранить поведение для явно переданного пустого списка. При передаче списка его изменение на месте остаётся частью контракта.

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

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

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

Подробнее