Я совершенно ошеломлен, почему происходит следующее:
Вот мой код:
def add_one(array):
new_array = array
length = len(array)
for i in range(length):
new_array[i] = new_array[i]+1
return new_array
x = [1,2,3,4,5];
y = add_one(x)
print x
print y
Вот результаты:
[2, 3, 4, 5, 6]
[2, 3, 4, 5, 6]
Я не понимаю, почему х меняется.
Мои размышления:
Каким-то образом x передается в качестве глобальной переменной функции add_one. Я включил 'new_array = array', чтобы если массив был глобальной переменной x, x не изменился бы. Однако каким-то образом new_array также стал глобальной переменной x при выполнении 'new_array = array'. Я написал альтернативную версию функции add_one, которая не вызывала у меня проблем:
def add_one(array):
new_array = []
length = len(array)
for i in range(length):
new_array.append(array[i]+1)
Кажется, что если локальная переменная (то есть массив) редактируется ее индексом в функции, она становится глобальной по отношению к глобальной переменной, которая была взята в качестве входных данных для этой функции?
Понятия не имею, что происходит. Любые объяснения будут высоко оценены.