首頁  >  文章  >  後端開發  >  為什麼更新 Python 字典的淺表副本不會影響原始字典?

為什麼更新 Python 字典的淺表副本不會影響原始字典?

Linda Hamilton
Linda Hamilton原創
2024-11-23 22:43:12732瀏覽

Why Doesn't Updating a Shallow Copy of a Python Dictionary Affect the Original?

了解Python 字典中的淺複製:為什麼副本中的更新不會影響原始內容

使用Python 字典時,重要的是了解淺複製和深複製之間的差異。淺複製會建立一個新字典,其中包含對與原始字典相同的物件的引用,而深複製則會建立一個包含物件副本的新字典。

使用 dict.copy() 進行淺複製

dict.copy() 方法執行字典的淺表複製。這意味著新字典將包含對儲存在原始字典中的相同物件的引用。因此,對副本所做的任何更改也將反映在原始詞典中。

範例:

original = {'a': 1, 'b': 2}
new = original.copy()
new.update({'c': 3})

print(original)  # {'a': 1, 'b': 2}
print(new)  # {'a': 1, 'c': 3, 'b': 2}

在此範例中,dict.copy () 方法建立一個新字典new,其中包含對與原始字典相同的物件的引用。當我們使用 {'c': 3} 更新副本時,原始檔案和副本都會反映此變更。

為什麼副本中的更新不會影響原始文件

淺副本中的更新不影響原始副本的原因是副本僅包含對對象的引用。當我們更新副本時,我們不會更改實際對象,而只會更改引用。

這與列表相反,其中淺表副本包含對列表本身的引用,而不是其中的元素。當我們更新清單的副本時,我們正在更新清單中的元素,這會影響副本和原始元素。

使用 copy.deepcopy() 進行深度複製

要建立與原始字典完全隔離的字典副本,我們可以使用 copy.deepcopy() 函數。此函數遞歸複製字典中的所有對象,建立具有不同引用的新結構。

範例:

import copy

original = {'a': 1, 'b': 2}
new = copy.deepcopy(original)
new.update({'c': 3})

print(original)  # {'a': 1, 'b': 2}
print(new)  # {'a': 1, 'c': 3, 'b': 2}

在此範例中,copy.deepcopy( ) 函式建立一個新字典 new,其中包含原始字典中物件的副本。當我們更新副本時,原始字典不受影響。

以上是為什麼更新 Python 字典的淺表副本不會影響原始字典?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn