В чем отличие функций?

Почему b становится глобальной? Это же аргумент функции.

def f(a, b=[]):
    b.append(a)
    return b

print(f(1))
print(f(2))
print(f(3))


[1]
[1, 2]
[1, 2, 3]

def f(a):
    b = []
    b.append(a)
    return b

print(f(1))
print(f(2))
print(f(3))


[1]
[2]
[3]


Ответы (1 шт):

Автор решения: qwardo

В первом примере функция f имеет дефолтный аргумент b, который изначально является пустым списком. Когда вы вызываете функцию f без указания значения для b, этот список сохраняется между вызовами функции, поскольку он является мутируемым объектом и используется в качестве значения по умолчанию. Поэтому изменения в b (например, добавление новых элементов) сохраняются между вызовами функции, и вы видите накопленные результаты. Второй пример не имеет дефолтного значения для b, и каждый раз, когда вызывается функция, создается новый список b.

→ Ссылка