Python 3. Объект списка, являющийся необязательным параметром функции, не удаляется после завершения работы функции


Недавно начал изучать Python-3 и столкнулся с таким интересным поведением работы функций.

Пример:

def foo(x=[]):
    x.append(1)
    print x

foo()
foo()
foo()

Результат:

[1]
[1, 1]
[1, 1, 1]

То есть, объект списка не удаляется после завершения работы функции, как это происходит с другими объектами.

Причем, если список будет являться обязательным параметром функции, то, он, как и положено, будет удален по завершении работы функции.

Стало интересно, это баг или фича Питона? Буду благодарен за разъяснения. Погуглил, не нашел ответа на других ресурсах...


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