python 这个问题,“坑”了我一下午啊!
# 我要开始表演了!
res = []
a = [1, 2]
b = a
res.append(a) # 存储的是 a 的地址!
print(res, b)
# [[1, 2]] [1, 2]
a = [2, 1]
print(res, b)
# [[1, 2]] [1, 2]
--------------------------------------
# 第 2 种 , 修改元素的值
res = []
a = [1, 2]
b = a
res.append(a)
print(res, b)
# [[1, 2]] [1, 2]
a[0], a[1] = a[1], a[0]
print(res, b)
# [[2, 1]] [2, 1]
--------------------------------------
# 第 3 种 , 索引取元素是取的值
res = []
a = [1, 2]
b = a[0]
res.append(a[0]) # 存储的是 a[0] 的值!
print(res, b)
#[1] 1
a[0], a[1] = a[1], a[0]
print(res, b)
#[1] 1
1. 第一种是指向另一个存储新值的地址,第二种是直接在原地址修改值
2. 由此可见,list.append方法 也好,b= 也好,如果是list 名字,则为list当时的地址,此后该 list 指向其它地址,不影响之前操作;若原地址修改,则影响;如果是元素,则直接赋值!