Sobes.tech
Back to questions
Junior — Middle
54

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

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], а не [2]

Чтобы избежать этой проблемы, обычно используют значение по умолчанию None и внутри функции создают новый объект:

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

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