Sobes.tech
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

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