Когда значение по умолчанию для аргумента функции изменяется между вызовами, это может привести к неожиданному поведению, особенно если значение по умолчанию является изменяемым объектом (например, списком или словарем).
Причина этого заключается в том, что значения по умолчанию для аргументов функций в Python создаются только один раз, при определении функции, а не при каждом ее вызове. Таким образом, если значение по умолчанию является изменяемым объектом, то этот объект будет общим между всеми вызовами функции, если аргумент не будет явно передан.
Рассмотрим пример:
    
    def my_function(my_list=[]):
        my_list.append(1)
        print(my_list)
    my_function()  # Вывод: [1]
    my_function()  # Вывод: [1, 1]
    my_function()  # Вывод: [1, 1, 1]
    
    
    В этом примере, my_list инициализируется пустым списком только один раз.  Каждый последующий вызов my_function() без аргументов добавляет 1 к одному и тому же списку, изменяя его значение между вызовами.
Чтобы избежать этой проблемы, рекомендуется использовать None в качестве значения по умолчанию и создавать новый изменяемый объект внутри функции, если значение аргумента равно None:
    
    def my_function(my_list=None):
        if my_list is None:
            my_list = []
        my_list.append(1)
        print(my_list)
    my_function()  # Вывод: [1]
    my_function()  # Вывод: [1]
    my_function()  # Вывод: [1]
    
    
    В этом исправленном варианте, каждый вызов my_function() без аргументов создает новый пустой список, что гарантирует, что значение по умолчанию не изменяется между вызовами.
Ключевые моменты:
None в качестве значения по умолчанию и создавайте новые изменяемые объекты внутри функции.