Почему список по умолчанию сохраняется между вызовами

Сначала [1], затем [1, 2]. Объект списка по умолчанию создаётся при определении функции и повторно используется при вызовах без items.

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

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

Сначала [1], затем [1, 2]. Объект списка по умолчанию создаётся при определении функции и повторно используется при вызовах без items.

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

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

Условие

В Python определено def add(value, items=[]): items.append(value); return items. Что вернут add(1) и add(2), если напечатать каждый результат сразу?

Ответ

Сначала [1], затем [1, 2]. Объект списка по умолчанию создаётся при определении функции и повторно используется при вызовах без items.

Исправление:

def add(value, items=None):
    if items is None:
        items = []
    items.append(value)
    return items

Явно переданный список всё ещё изменяется — это часть данного контракта. Если требуется не менять аргумент, сначала создайте его копию.

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

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

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

Подробнее