我对为什么会发生以下情况感到非常震惊:
这是我的代码:
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 会改变。
我的猜测:不知何故,x 是作为函数 add_one 的全局变量。我包括了'new_array = array',这样如果array 是某种全局变量x,x 就不会改变。然而,当执行 'new_array = array' 时,不知何故 new_array 也变成了全局变量 x。我写了函数 add_one 的另一个版本,它没有给我带来问题:
def add_one(array):
new_array = []
length = len(array)
for i in range(length):
new_array.append(array[i]+1)
似乎如果一个局部变量(即一个数组)通过它在函数中的索引进行编辑,那么它相对于作为该函数输入的全局变量变成全局变量?
我不知道发生了什么。任何解释将不胜感激。