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循环中访问的元素会修改原始变量?
在第一个代码中,a
和b
分别是一维单条目numpy数组的名称。当您在for
语句中构建列表[a, b]
时,该列表包含这些数组,因此循环中的i
将成为一个数组。关键是下一步:当执行i+=1
行时,Python将1
添加到数组中。Numpy截取这个命令,并使用一个通用函数(也称为ufunc(将1
添加到数组的每个成员中。因此,每个数组都发生了变化。但是,a
和b
仍然是这些数组的名称,因此a
和b
都发生了更改,您可以得到结果。
在第二个代码中,a
和b
分别是一个数字常量的名称。当列表生成时,它包含这些常量。当执行行i+=1
时,1
被添加到常量中,但由于常量是不可变的,结果被丢弃。因此CCD_ 17和CCD_。
所以简单的答案是:第一个代码使用列表中的可变值,而第二个代码使用了列表中的不可变值。这些在Python中的行为不同。