Это чисто методологический вопрос. У меня есть функция basi c, и она неожиданно добавляет значения в список, который я создал. Я знаю, что .append()
и .extend()
изменяют объект списка на месте, но моя конкретная проблема связана с +=
.
У меня создалось впечатление, что x+=y
совпадает с x = x+y
но это не так в функции, где я обнаружил, что она перезаписывает локальные переменные, определенные внешне для функции.
Позвольте мне проиллюстрировать:
def test1(lst):
lst += ['new element']
return 'something else'
def test2(lst):
lst = lst + ['new element']
return 'something else'
# Testing them
lst = ['a','sample','list']
test1(lst)
print('test1 returns the following:',lst)
lst = ['a','sample','list']
test2(lst)
print('test2 returns the following:',lst)
Это возвращает
test1 returns the following: ['a', 'sample', 'list', 'new element']
test2 returns the following: ['a', 'sample', 'list']
Конечно, если вы измените имена переменных, то этого не произойдет. Но это в корне меняет мое понимание переменных, определенных внутри функций, а не локально, и может иметь серьезные последствия для моего поведения при кодировании. Может кто-нибудь внятно объяснить, что происходит?