Инициализация списка как аргумент по умолчанию

def add(mass=[]):
    mass.append(1)
    return mass


add()
print(add())

>>> [1, 1]

Почему это работает именно так? Где хранится список и почему он не обнуляется?


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

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

Аргумент по умолчанию создается только один раз при запуске программы и при каждом вызове функции мы ссылаемся на один и тот же участок в памяти.

https://docs-python.ru/tutorial/ispolzovanie-spiskov-list-python/neozhidannoe-povedenie-spiskov/

→ Ссылка
Автор решения: Andrey Maslov

В данном случае при определении функции определяется переменная mass = []

в дальнейшем когда ты вызываешь метод без параметров, то ты все свои операции производишь над этой переменной

Если ты хочешь, что бы она обнулялась всегда, когда ты вызываешь метод без параметров, то лучше сделать так:

def add(mass=None):
    if mass is None:
        mass = []
    mass.append(1)
    return mass

подробней можешь почитать поискав по python mutable default argument

→ Ссылка