首頁 >後端開發 >Python教學 >Python 字典中的淺複製與深複製:「copy()」何時失敗?

Python 字典中的淺複製與深複製:「copy()」何時失敗?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-22 20:20:13271瀏覽

Shallow vs. Deep Copy in Python Dictionaries: When Does `copy()` Fail?

Python 中的淺拷貝與深拷貝:了解對字典的影響

Python 中字典的淺拷貝,使用字典 創建.copy (),可能不會如預期更新原始字典。這種行為源自於淺複製與深複製的概念。

什麼是淺複製?

在淺複製中,引用的是字典的內容,而不是比按值複製。這意味著原始字典和複製的字典都指向相同的底層資料結構。

示範:

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

與預期相反,原始字典保持不變淺拷貝更新後。這是因為對資料的引用是共享的,而不是複製的。

清單有何不同:

與字典不同,淺複製清單確實會導致資料的共享引用資料。這是因為列表透過引用包含值。

>> original = [1, 2, 3]
>> new = original
>> new.append(4)
>> new, original
([1, 2, 3, 4], [1, 2, 3, 4])

在這種情況下,原始清單和新清單都引用相同的數據,因此對一個清單所做的變更會影響另一個清單。

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

要創建字典的真正不同的副本,包括其內容,必須使用 copy.deepcopy() 。此函數會按值複製結構和值,確保完全隔離。

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

複製操作類型:

  1. 引用賦值(a = b): 兩個變數都指向同一個
  2. 淺複製(b = a.copy()):單獨的對象,但底層資料是共享的。
  3. 深複製 (b = copy) .deepcopy(a)):完全隔離,具有不同的結構和值。

以上是Python 字典中的淺複製與深複製:「copy()」何時失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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