import numpy as np
W = np.array([0,1,2])
W1 = W
W1 += np.array([2,3,4])
print W
W = np.array([0,1,2])
W1 = W
W1 = W1 + np.array([2,3,4])
print W
上面的代码会发生变异W
,但下层代码不会变异W
. Why?
几乎任何类型的收藏都是如此。这仅仅是由于 python 处理变量的方式造成的。var1 += var2
不等于var1 = var1 + var2
与收藏。我会根据我的理解进行解释,这当然可以改进,所以欢迎任何编辑/批评。
print("1:")
x1 = [7]
y1 = x1
y1 += [3]
print("{} {}".format(x1, id(x1)))
print("{} {}".format(y1, id(y1)))
print("2:")
x2 = [7]
y2 = x2
y2 = y2 + [3]
print("{} {}".format(x2, id(x2)))
print("{} {}".format(y2, id(y2)))
Output:
1:
[7, 3] 40229784 # first id
[7, 3] 40229784 # same id
2:
[7] 40228744 # first id
[7, 3] 40230144 # new id
Saying var1 = var1 + var2
使用新 ID 创建一个新对象。它采用旧值,将其添加到第二个变量,并将其分配给具有第一个对象的名称的新对象。在里面var1 += var2
例如,它只是将其附加到 ID 指向的对象,这与旧变量相同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)