Вопрос проверяет понимание особенностей значений по умолчанию в Python и типичных ошибок при работе с изменяемыми объектами.
Значения по умолчанию вычисляются один раз при определении функции, а не при каждом вызове. Если использовать список или словарь как значение по умолчанию, он будет общий для всех вызовов. Правильный подход — использовать None и создавать объект внутри функции. Это предотвращает скрытые ошибки.
В Python значение по умолчанию создается один раз:
def add_item(lst=[]):
lst.append(1)
return lst
Результат:
add_item() # [1]
add_item() # [1, 1]
Список один и тот же.
Использовать None как маркер:
def add_item(lst=None):
if lst is None:
lst = []
lst.append(1)
return lst
Теперь список создается каждый раз.
Причина:
значения по умолчанию хранятся в объекте функции
они не пересоздаются при каждом вызове
Это оптимизация, но она требует аккуратности.
Кэш
Аккумуляторы
Конфигурации
API-клиенты
Для аргументов-коллекций безопасный шаблон — использовать None и инициализацию внутри функции.