a = [1,2,3] b = a print(id(a),id(b),a == b) print(a,b) b = b + [1,2,3] print(a,b) print(id(a),id(b),a == b) print("====================================") a = [1,2,3] b = a print(id(a),id(b),a == b) print(a,b) b += [1,2,3] print(a,b) print(id(a),id(b),a == b)
执行结果:
1939675767304 1939675767304 True [1, 2, 3] [1, 2, 3] [1, 2, 3] [1, 2, 3, 1, 2, 3] 1939675767304 1939676988616 False ==================================== 1939675767368 1939675767368 True [1, 2, 3] [1, 2, 3] [1, 2, 3, 1, 2, 3] [1, 2, 3, 1, 2, 3] 1939675767368 1939675767368 True
我第一个觉得a,b都是同时指向列表[1,2,3],对b修改,a也会同时修改。所以结果应该是
[1,2,3,1,2,3][1,2,3,1,2,3]但是结果确实错误的。
对于操作b = b+ [1,2,3]
先计算b+[1,2,3]然后 b再指向这个结果。所以b的结果会发生改变。
b += [1,2,3]则是改变了b的值,又因为b =a,所以a,b的结果会同时改变。