很多人在學習python3的時候,在字典部分copy和deepcopy感到很困惑,現在針對這兩個方法進行區分,即一種是淺複製(copy),一種是深度複製(deepcopy)。
開頭先下個結論
|
字典數據類型的copy函數,當簡單的值替換的時候,原始字典和複製過來的字典之間互不影響,但是當添加,刪除等修改操作的時候,兩者之間會相互影響。
廢話不多,上代碼示例吧:
代碼如下: from copy import deepcopy d = {} d["names"] = ["Alfred","Bertrand"] b = d.copy() b["names"] = "bob" # 字典數據類型的copy函數,當簡單的值替換的時候,原始字典和複製過來的字典之間互不影響 print("#字典數據類型的copy函數,當簡單的值替換的時候,原始字典和複製過來的字典之間互不影響") print(b) print(d) c = d.copy() dc = deepcopy(d) # 字典數據類型的copy函數,但是當添加,刪除等修改操作的時候,兩者之間會相互影響。 print("#字典數據類型的copy函數,但是當添加,刪除等修改操作的時候,兩者之間會相互影響。") d["names"].append("Clive") print(d) print(c) #deepcopy深度複製,在這裏我理解的是完全複製然後變成一個新的對象, # 複製的對象和被複制的對象沒有任何關係,彼此之間無論怎麼改變都相互不影響。 print("dc是深度copy(deepcopy):") print(dc) |
結果: #字典數據類型的copy函數,當簡單的值替換的時候,原始字典和複製過來的字典之間互不影響 {'names': 'bob'} {'names': ['Alfred', 'Bertrand']} #字典數據類型的copy函數,但是當添加,刪除等修改操作的時候,兩者之間會相互影響。 {'names': ['Alfred', 'Bertrand', 'Clive']} {'names': ['Alfred', 'Bertrand', 'Clive']} dc是深度copy(deepcopy): {'names': ['Alfred', 'Bertrand']} |