如何在 Python 中複製物件?
在 Python 中,如果你想複製物件,賦值運算子將無法滿足目的。它在目標和物件之間建立繫結,即它永遠不會建立新的物件。它只建立一個新的變數,共享原始物件的引用。為了解決這個問題,提供了 copy 模組。此模組具有通用的淺複製和深複製操作。
淺複製
淺複製構造一個新的複合物件,然後將對原始物件中找到的物件的引用插入到其中。它使用以下方法複製物件 −
copy.copy(x) Return a shallow copy of x.
深複製
深複製構造一個新的複合物件,然後遞迴地將原始物件中找到的物件的副本插入到其中。它使用以下方法複製物件 −
copy.deepcopy(x[, memo]) Return a deep copy of x. Here, memo is a dictionary of objects already copied during the current copying pass;
使用深複製操作,可能會發生以下問題:
遞迴可能會導致遞迴迴圈。
由於深複製複製所有內容,因此它可能會複製太多內容,例如打算在副本之間共享的資料。
但是,deepcopy() 方法避免了這些問題。讓我們看看如何:
保留已在當前複製過程中複製的物件的備忘錄字典
允許使用者定義的類覆蓋複製操作或複製的元件集。
安裝並匯入 copy 模組
要安裝 copy 模組,請使用 pip:
pip install copy
安裝後要使用 copy 模組:
import copy
使用淺複製複製物件
示例
我們將使用淺複製來複制物件。它建立一個新物件,儲存原始元素的引用。讓我們看一個例子 −
import copy # Create a List myList = [[5, 10], [15, 20]] # Display the list print("List = ", myList) # Shallow Copy myList2 = copy.copy(myList) # Display the copy of the List print("New copy of the list =", myList2)
輸出
List = [[5, 10], [15, 20]] New copy of the list = [[5, 10], [15, 20]]
在上面的示例中,我們使用 copy() 方法對列表進行了淺複製。
使用深複製複製物件
示例
我們將使用 deepcopy() 方法對物件進行深複製。深複製也會建立一個新物件。讓我們看一個例子 −
import copy # Create a List myList = [[5, 10], [15, 20]] # Display the list print("List = ", myList) # Deep Copy myList2 = copy.deepcopy(myList) # Display the copy of the List print("New copy of the list =", myList2)
輸出
List = [[5, 10], [15, 20]] New copy of the list = [[5, 10], [15, 20]]
廣告