В этом конкретном случае это потому, что list
s являются mutable .
В результате их в глобальном пространстве имен или даже переданный через функцию , означает, что они будут изменены, поскольку Python содержит ссылку на изменяемый объект, а не его копию.
Если вы попытаетесь сделать то же самое с tuple
s это не сработает, поскольку они immutable .
Способ избежать этого - предоставить копию списка функции, а не самому списку:
func2(list[:])
В то же время вы можете сделать это с помощью аргументов по умолчанию, где вы можете указать аргумент по умолчанию как []
, и если вы тогда .append()
что-то ему, этот аргумент по умолчанию будет навсегда удерживаться этот элемент внутри него для всех будущих вызовов (если вы не удалите его каким-либо образом).