Какой вариант корректно избегает ловушки с изменяемым значением по умолчанию для списка?

Adef add(x, items=[]): items.append(x); return items
Bdef add(x, items=None): items = [] if items is None else items; items.append(x); return items
Cdef add(x, items=()): items.append(x); return items
Ddef add(x, items={}): items.append(x); return items
Правильный ответ. Безопасный паттерн: ставить дефолт None и создавать новый список внутри функции.

Разбор

Изменяемые дефолты (список, словарь, множество) создаются один раз и переиспользуются. Чтобы избежать общих побочных эффектов между вызовами, обычно ставят items=None, а внутри делают инициализацию: items = [] if items is None else items. Тогда при каждом вызове без items создаётся новый список, и данные не «накапливаются» неожиданно.

Проверь себя · 1/3разбор после ответа
Есть функция def power(x, exp=2): return x ** exp. Что вернет вызов power(3)?
Тренировать Python в Telegram

Ещё вопросы по теме «Функции и аргументы»