В чем разница между изменяемыми (mutable) и неизменяемыми (immutable) типами данных в Python? Почему нельзя использовать изменяемые типы, например list или dict, в качестве аргументов по умолчанию в функциях?

Изменяемый объект можно менять на месте, неизменяемый — нет. list и dict разрешены как аргументы по умолчанию, но создаются один раз при определении функции и затем разделяются между вызовами.

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

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

Изменяемый объект можно менять на месте, неизменяемый — нет. list и dict разрешены как аргументы по умолчанию, но создаются один раз при определении функции и затем разделяются между вызовами.

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

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

Изменяемый объект можно менять на месте, неизменяемый — нет. list и dict разрешены как аргументы по умолчанию, но создаются один раз при определении функции и затем разделяются между вызовами.

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

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

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

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

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

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

Подробнее