1 a = 1 2 print('a', a, id(a)) 3 b = a 4 a += 1 5 print('a', a, id(a)) 6 print('b', b, id(b)) 7 8 print('-' * 20) 9 a = a + 1 10 print('a', a, id(a)) 11 print('b', b, id(b)) 12 13 #输出如下: 14 a 1 140721411760528 15 a 2 140721411760560 16 b 1 140721411760528 17 -------------------- 18 a 3 140721411760592 19 b 1 140721411760528
如上所示,a += 1 后,a的地址改变,而b=a是指向a的原地址,当a放生改变,源地址不变,所以b的值和地址都不改变
1 a = [1, 2] 2 print(id(a)) 3 f = a 4 a += [3, 4] 5 print(id(a)) 6 print(f) 7 8 print('_' * 20) 9 b = [1, 2] 10 print(id(b)) 11 g = b 12 b = b + [3, 4] 13 print(id(b)) 14 print(g) 15 16 #输出如下: 17 1534352052616 18 1534352052616 19 [1, 2, 3, 4] 20 ____________________ 21 1534352053128 22 1534352609736 23 [1, 2]
如上所示,我们使用列表来进行比较,会发现与之前不同:
a与a += [3, 4]的地址相同,未发生变化,并且f的值发生变化,等于变化后的a的值,说明a原地址不变,值发生变化;
b与b = b + [3, 4]的地址不同,说明地址发生变化,g仍指向原地址