在 Python 中深拷貝列表
Samyak Jain
2023年1月30日
我們可以在 Python 中建立淺拷貝和深拷貝。列表的深拷貝是建立一個新列表,然後遞迴地將原始列表元素的拷貝插入其中。它是指拷貝一個列表,對原始列表所做的任何更改都不會影響拷貝的列表。
在 Python 中使用 copy.deepcopy()
函式深拷貝列表
來自 copy
模組的 deepcopy()
函式用於建立指定列表的深拷貝。如果我們更改此拷貝,則原始列表的內容保持不變,不會更改。
例如,
import copy
A = [[10, 60], [50, "Hi"], ["Hello", 5, 80]]
B = copy.deepcopy(A)
A[2][0] = "World"
A[0][1] = 10
print("List A is : % s" % (A))
print("List B is : % s" % (B))
輸出:
List A is : [[10, 10], [50, 'Hi'], ['World', 5, 80]]
List B is : [[10, 60], [50, 'Hi'], ['Hello', 5, 80]]
在列表 A
中分配新值後,列表 B
不會被修改,因為列表 B
是列表 A
的深拷貝。列表 A
和列表 B
相互獨立。
在 Python 中使用列表推導深拷貝列表
Python 中的列表推導用於從其他可迭代物件(如列表、元組、字串等)建立新列表。列表推導使程式碼簡單高效。
我們基本上會做 deepcopy()
函式所做的事情,並在此方法中遞迴地建立給定列表的新拷貝。
例如,
A = [2, 4, 6, 8, 10]
B = [i for i in A]
A[0] = "Hi"
print("List A is : % s" % (A))
print("List B is : % s" % (B))
輸出:
List A is : ['Hi', 4, 6, 8, 10]
List B is : [2, 4, 6, 8, 10]
我們也可以在沒有列表推導的情況下執行此方法,並以傳統方式使用 for
迴圈。然而,它需要更多的程式碼行和更多的時間。