Этот код:Функция в python изменяет входные переменные, почему?
def do_something(arg):
x=arg
x[0] = 9
return x
y = [1,2]
print "before: ", y
print "result of do_something(): ", do_something(y)
print "after: ", y
Результаты в этом:
before: [1, 2]
result of do_something(): [9, 2]
after: [9, 2]
Я не понимаю, почему функция изменяет первоначальные списки, которые я прохожу? Я даже (попытаюсь) создать новую копию arg (x), чтобы предотвратить ее. Даже если я не верну x, я все равно получаю тот же результат.
Возможный дубликат [ "Наименее Удивления" в Python: Мутабельный аргумент по умолчанию] (http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument) или [Как клонировать или копировать список в Python?] (http://stackoverflow.com/questions/2612802/how-to-clone-or-copy-a-list-in-python) – styvane
смотреть [факты и Миф о именах и значениях Python] (https://www.youtube.com/watch?v=_AEJHKGk9ns) от Ned Batchelder, и все будет ясно – miraculixx