Sobes.tech
Назад к вопросам
Senior
3

Что выведет код с изменяемым объектом по умолчанию в аргументах функции (mutable default argument)?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

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]
print(append_to_list(3))  # Выведет: [1, 2, 3]

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

def append_to_list(value, my_list=None):
    if my_list is None:
        my_list = []
    my_list.append(value)
    return my_list