Поскольку Python передается по ссылке на объект, при передаче чего-либо в функцию он указывает на тот же объект в памяти, которым вы можете манипулировать.Если вы хотите, чтобы функция не изменяла исходный список, вам необходимо сделать ее копию при передаче в функцию или внутри самой функции.
Отправка копии в функцию:
def mutation(L):
L.append("x")
L = []
mutation(list(L))
print(L)
# Prints out []
Создание копии внутри функции:
def mutation(L):
L = list(L)
L.append("x")
L = []
mutation(L)
print(L)
# Prints out []