import numpy as np
a = np.array([1])
b = np.array([2])
for i in [a,b]:
i+=1
print(a)
print(b)
这将生成输出
[2]
[3]
但是
a = 1
b = 2
for i in [a,b]:
i+=1
print(a)
print(b)
这将生成输出
1
2
为什么在行为上存在这种差异?在哪种情况下,我可以假定在for循环中访问的元素会修改原始变量?
答案 0 :(得分:3)
在您的第一个代码中,a
和b
分别是一维单项numpy数组的名称。在[a, b]
语句中构建列表for
时,该列表包含这些数组,因此循环中的i
成为数组。关键是下一个:执行行i+=1
时,Python将1
添加到数组中。 Numpy截获此命令,并使用通用函数(也称为ufunc)将1
添加到数组的每个成员。因此,每个数组都会更改。但是,a
和b
仍然是这些数组的名称,因此a
和b
都被更改了,就可以得到结果。
在第二个代码中,a
和b
分别是数字常数的名称。构建列表时,它包含那些常量。当执行行i+=1
时,1
被添加到常量,但是由于常量是不可变的,结果被丢弃了。因此a
和b
不变。
因此,简短的答案是:您的第一个代码在列表中使用可变值,而第二个代码在列表中使用不可变值。这些在Python中的行为有所不同。