在 Python 中深拷貝列表

Samyak Jain 2023年1月30日
  1. 在 Python 中使用 copy.deepcopy() 函式深拷貝列表
  2. 在 Python 中使用列表推導深拷貝列表
在 Python 中深拷貝列表

我們可以在 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 迴圈。然而,它需要更多的程式碼行和更多的時間。

相關文章 - Python List