def add_numbers(a, b=[]):
    b.append(a)
    return sum(b)
print(add_numbers(1))
print(add_numbers(2, [3]))
add_numbers(1) вернет 1.  В качестве значения по умолчанию для аргумента `b` используется пустой список, который изменяется при каждом вызове функции.add_numbers(2, [3]) вернет 5.  Аргумент `b` передается явно как [3], затем к нему добавляется 2, и вычисляется сумма.
1
5
  Разбор задачи:
Эта задача проверяет понимание работы значений аргументов по умолчанию в Python, особенно когда в качестве значения по умолчанию используется изменяемый объект (в данном случае, список).
Первый вызов: print(add_numbers(1))
add_numbers вызывается с аргументом a = 1 и аргументом b, для которого используется значение по умолчанию [].b.append(a) добавляет 1 в список b.  Теперь b равно [1].sum(b) возвращает сумму элементов списка b, то есть 1.1, и он выводится в консоль.Второй вызов: print(add_numbers(2, [3]))
add_numbers вызывается с аргументом a = 2 и аргументом b = [3]. Важно: теперь используется список, который передали явно, а не список по умолчанию.b.append(a) добавляет 2 в список b.  Теперь b равно [3, 2].sum(b) возвращает сумму элементов списка b, то есть 3 + 2 = 5.5, и он выводится в консоль.Вывод в консоль:
1
5
Важный нюанс:
Если бы мы вызывали функцию add_numbers несколько раз, используя только значение по умолчанию для b, то список b продолжал бы расти от вызова к вызову.  Например, следующий код:
def add_numbers(a, b=[]):
    b.append(a)
    return sum(b)
print(add_numbers(1))
print(add_numbers(2)) # b будет [1, 2]
print(add_numbers(3)) # b будет [1, 2, 3]
Вывел бы:
1
3
6
Рекомендации по исправлению (если цель - каждый раз начинать с пустого списка по умолчанию):
def add_numbers(a, b=None):
    if b is None:
        b = []
    b.append(a)
    return sum(b)
print(add_numbers(1))
print(add_numbers(2))
print(add_numbers(3))
В этом случае вывод был бы:
1
2
3