This is true for almost any type of collection. This is simply due to the way python treats variables. var1 += var2
is not the same as var1 = var1 + var2
with collections. I'll explain it as far as I understand it, which can certainly be improved, so any edits/criticisms are welcomed.
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
creates a new object with a new ID. It takes the old value, adds it to the 2nd variable, and assigns it to a new object with the NAME of the first object. In the var1 += var2
example, it simply appends it to the object pointed at by the ID, which is the same as the old variable.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…