>>> def append(list=[]):
... # добавление длины списка в список
... list.append(len(list))
... return list
...
>>> append(['a','b'])
['a', 'b', 2]
>>>
>>> append() # вызов без аргумента использует значение list по умолчанию []
[0]
>>>
>>> append() # Но что произойдёт при повторном вызове append без аргумента?
Ответ
Когда значением по умолчанию для аргумента функции является выражение, оно вычисляется только один раз, а не всегда при вызове функции. Таким образом, после того как аргумент list был инициализирован в пустой массив, последующие вызовы функции без аргументов продолжат использовать тот же самый массив, что был инициализирован изначально.
>>> append() # при первом вызове без аргумента используется значение по умолчанию []
[0]
>>> append() # но затем...
[0, 1]
>>> append() # последовательные вызовы расширяют список по умолчанию
[0, 1, 2]
>>> append() # и так продолжается...
[0, 1, 2, 3]
@python_job_interview