python笔试做错的题目

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的结果会同时改变。

原文地址:https://www.cnblogs.com/hamish26/p/11245256.html