def append_to_list(value, result=[]):
    result.append(value)
    return result
print(append_to_list(1))
print(append_to_list(2, []))
print(append_to_list(3))
Результат работы кода будет следующим:
[1]
[2]
[1, 3]
Объяснение:
result=[] создается только один раз.append_to_list(1) добавляет 1 в список result, и возвращает [1].append_to_list(2, []) передает новый пустой список, поэтому он добавляет 2 в этот новый список и возвращает [2].append_to_list(3) снова использует тот же самый список result, который был создан при определении функции (и который уже содержит 1), добавляет 3 к нему и возвращает [1, 3].Эта задача демонстрирует особенность работы аргументов по умолчанию в Python, когда в качестве значения по умолчанию используется изменяемый объект (в данном случае, список).
Разберем код построчно:
def append_to_list(value, result=[]):append_to_list, принимающая аргумент value и необязательный аргумент result со значением по умолчанию в виде пустого списка []. Важно: этот список создается только один раз при определении функции.
    result.append(value)result добавляется значение аргумента value.
    return resultresult.
    print(append_to_list(1))append_to_list с аргументом value=1. Аргумент result не передан, поэтому используется список по умолчанию. В этот список добавляется 1, и список [1] выводится на экран.
    print(append_to_list(2, []))append_to_list с аргументом value=2 и явно переданным аргументом result=[]. Внимание: здесь создается новый пустой список, в который добавляется 2.  Выводится список [2]. Этот вызов никак не влияет на список, используемый по умолчанию.
    print(append_to_list(3))append_to_list с аргументом value=3. Аргумент result снова не передан, поэтому используется тот же самый список по умолчанию, который был создан при первом вызове функции. В этот список (который уже содержит 1) добавляется 3.  Выводится список [1, 3].
    Ожидаемый результат выполнения кода:
[1]
[2]
[1, 3]
  Важный вывод: Никогда не используйте изменяемые объекты (списки, словари, множества) в качестве значений аргументов по умолчанию. Если вам нужно такое поведение, используйте None в качестве значения по умолчанию и создавайте объект внутри функции, если аргумент равен None.
Пример правильной реализации:
def append_to_list(value, result=None):
    if result is None:
        result = []
    result.append(value)
    return result
print(append_to_list(1))
print(append_to_list(2, []))
print(append_to_list(3))
  В этом случае результат будет:
[1]
[2]
[3]