在以下代码中:
E=np.zeros((2,2))
H=np.zeros((2,2))+1
L=[]
L.append(E)
E=H
L.append(E)
print(L)
输出是我期望的:
[array([[0., 0.],
[0., 0.]]), array([[1., 1.],
[1., 1.]])]
即 L[0] 在第二次附加后保持不变。但是,对于代码:
E=np.zeros((2,2))
H=np.zeros((2,2))+1
L=[]
L.append(E)
E[0,0]=H[0,0]
L.append(E)
print(L)
输出是
[array([[1., 0.],
[0., 0.]]), array([[1., 0.],
[0., 0.]])]
即 L[0] 在第二次附加之后发生了变化。有人可以解释为什么有区别吗?我知道附加 E.copy() 更安全,但我不明白差异的来源是什么,因为 E[0,0] 是 numpy 而不是列表。
在您的第一个示例中,变量被分配给与引用(第二个数组)E
相同的数组。H
与第一个数组的原始关系E
被简单地覆盖。这就是第一个示例中第一个列表元素不受影响的原因。在您的第二个示例中,您更改了E
该列表的第一个条目所引用的数组的内容,以及该数组的第一个条目也已分配给该数组的内容。因此它会改变。
在 python 中的操作=
是相当明确的。只需为变量分配一些引用。无论之前提到的变量是什么,都无关紧要。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句