Вопрос на собеседовании · Python-разработчик

Изменяемый аргумент по умолчанию: в чём ловушка?

Короткий ответ, ключевые тезисы и ошибки, которых стоит избежать на интервью.

Обновлено 25 сентября 2026 г.базовая тема
Python-разработчикПрофессии и разделы
Короткий ответ

Значения аргументов по умолчанию вычисляются один раз при создании функции, а не при каждом вызове. Поэтому список или словарь, изменённый в первом вызове, будет тем же объектом в последующих вызовах.

Безопасный шаблон — использовать None как маркер и создавать новый объект внутри функции. Если None является допустимым бизнес-значением, применяют отдельный объект-sentinel, чтобы различать отсутствие аргумента и явно переданное значение.

01 · Структура ответа

Что важно сказать интервьюеру

Раскройте тезисы, которые относятся именно к этому вопросу, и поясните их на собственном примере:

Проблема относится к любому изменяемому объекту, а не только к спискам.
Объект создаётся в момент выполнения def.
Проверка обычно выглядит как if value is None, а не if not value.
То же правило можно намеренно использовать как простой кеш, но это должно быть очевидно.

02 · Пример

Как объяснить на практике

Функция add_item(item, items=[]) добавляет элемент в один и тот же список при каждом вызове. Вариант add_item(item, items=None) с созданием items = [] внутри даёт каждому вызову отдельный список.

Не заучивайте формулировку дословно. Свяжите принцип с задачей из собственного проекта — интервьюер почти наверняка попросит уточнить детали реализации и компромиссы.

03 · Ошибки

Чего избегать в ответе

Проверять if not items и тем самым заменять корректно переданный пустой список.
Исправлять только list, оставляя такую же проблему с dict или set.
Объяснять поведение тем, что Python случайно кеширует результат функции.

04 · Углубление

Что могут спросить следом

  1. Когда вычисляются значения по умолчанию?
  2. Зачем нужен sentinel object?
  3. Какие ещё объекты считаются изменяемыми?

05 · Проверка фактов

Первоисточники по теме

Ссылки ниже помогают проверить понятия, методы и ограничения по теме. Они не являются доказательством того, что этот вопрос задают на каждом собеседовании.

Практика ответа

Ответьте вслух, а не про себя

Откроем тренировку сразу на этом вопросе. Выберите грейд, сформулируйте ответ и сравните его с подсказкой.

Потренировать ответ