Sobes.tech
Junior — Middle
83

Почему не рекомендуется использовать изменяемые объекты как значения по умолчанию в определении функций в Python?

Companies where asked
Медси

Answer from AI

sobes.tech AI

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

Пример:

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

print(add_item(1))  # [1]
print(add_item(2))  # [1, 2] — ожидаемо? Нет!

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

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

Так каждый вызов будет работать с новым списком.