Back to questions
Junior — Middle
65
По каким причинам не рекомендуется использовать изменяемые объекты как значения по умолчанию для параметров функции?
Answer from AI
sobes.tech AI
В Python значения по умолчанию для параметров функции вычисляются один раз при определении функции, а не при каждом её вызове. Если использовать изменяемый объект (например, список или словарь) в качестве значения по умолчанию, то все вызовы функции без явного аргумента будут использовать один и тот же объект. Это может привести к неожиданным побочным эффектам, например, к накоплению изменений между вызовами.
Пример проблемы:
def append_to_list(value, my_list=[]):
my_list.append(value)
return my_list
print(append_to_list(1)) # [1]
print(append_to_list(2)) # [1, 2] — ожидается [2], но список сохраняет изменения
Правильный подход — использовать None и создавать новый объект внутри функции:
def append_to_list(value, my_list=None):
if my_list is None:
my_list = []
my_list.append(value)
return my_list
Таким образом, каждый вызов функции будет работать с новым списком.