Сначала [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
Явно переданный список всё ещё изменяется — это часть данного контракта. Если требуется не менять аргумент, сначала создайте его копию.