Python dict字典copy()方法詳解

2020-07-16 10:04:51
copy() 方法用於返回一個具有相同鍵值對的新字典,例如:
a = {'one': 1, 'two': 2, 'three': [1,2,3]}
b = a.copy()
print(b)
執行結果為:

{'one': 1, 'two': 2, 'three': [1, 2, 3]}

可以看到,通過 copy() 方法,就可以將字典 a 的資料拷貝給字典 b。

注意,copy() 方法所遵循的拷貝原理,既有深拷貝,也有淺拷貝。拿拷貝字典 a 為例,copy() 方法只會對最表層的鍵值對進行深拷貝,也就是說,它會再申請一塊記憶體用來存放 {'one': 1, 'two': 2, 'three': []};而對於某些列表型別的值來說,此方法對其做的是淺拷貝,也就是說,b 中的 [1,2,3] 的值不是自己獨有,而是和 a 共有。

例如:
a = {'one': 1, 'two': 2, 'three': [1,2,3]}
b = a.copy()
#向 a 中新增新鍵值對,由於b已經提前將 a 所有鍵值對都深拷貝過來,因此 a 新增新鍵值對,不會影響 b。
a['four']=100
print(a)
print(b)
#由於 b 和 a 共用[1,2,3](淺拷貝),因此移除 a 中列表中的元素,也會影響 b。
a['three'].remove(1)
print(a)
print(b)
執行結果為:

{'one': 1, 'two': 2, 'three': [1, 2, 3], 'four': 100}
{'one': 1, 'two': 2, 'three': [1, 2, 3]}
{'one': 1, 'two': 2, 'three': [2, 3], 'four': 100}
{'one': 1, 'two': 2, 'three': [2, 3]}

從執行結果不難看出,對 a 增加新鍵值對,b 不變;而修改 a 某鍵值對中列表內的元素,b也會相應改變。