Встречается на собеседованиях • сегодня

Почему изменяемые типы нельзя делать дефолтными аргументами функции

Использование изменяемых объектов (например, списков или словарей) в качестве значений по умолчанию для аргументов функции может привести к неожиданному поведению. Дефолтные аргументы вычисляются один раз при создании функции, а не при каждом её вызове. Это значит, что все вызовы функции будут использовать один и тот же объект, что может привести к накоплению изменений.

Пример:

python
def add_item(item, lst=[]):
    lst.append(item)
    return lst

print(add_item(1))  # [1]
print(add_item(2))  # [1, 2] - неожиданно!

Правильный подход - использовать None и создавать новый объект внутри функции:

python
def add_item(item, lst=None):
    if lst is None:
        lst = []
    lst.append(item)
    return lst
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы