def update(x=[]):
    x.append(1)
    return x
print(update())
print(update())
Результат выполнения кода:
[1]
[1, 1]Пояснение: Аргумент x=[] является изменяемым объектом (списком), который инициализируется только один раз при определении функции.  При первом вызове update(), в этот список добавляется 1. При последующих вызовах, функция использует тот же самый список, а не создает новый.
Вопрос: Что выведет следующий код и почему?
def update(x=[]):
    x.append(1)
    return x
print(update())
print(update())
  Ответ:
Код выведет:
[1]
[1, 1]
  Объяснение:
Проблема кроется в значении по умолчанию для аргумента x функции update.  В Python значения по умолчанию для аргументов функций создаются только один раз, когда функция определяется. Это означает, что список [] создается один раз и переиспользуется при каждом вызове функции, если не передать другой список в качестве аргумента.
Шаг 1:
При первом вызове update() без аргументов, функция использует список по умолчанию [].  К этому списку добавляется число 1. Функция возвращает список [1], который и выводится.
Шаг 2:
При втором вызове update(), тот же самый список, который использовался в первом вызове (и который теперь содержит [1]), снова используется.  К этому списку добавляется еще одно число 1. Функция возвращает список [1, 1], который и выводится.
Как избежать этой проблемы:
Чтобы избежать этой проблемы, рекомендуется использовать None в качестве значения по умолчанию и создавать список внутри функции, если аргумент x не был передан:
def update(x=None):
    if x is None:
        x = []
    x.append(1)
    return x
print(update())
print(update())
  В этом исправленном варианте при каждом вызове update() без аргументов будет создаваться новый пустой список, и вывод будет:
[1]
[1]