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
Таким образом, каждый вызов функции будет работать с новым объектом.