python 的深淺複製
在Python中,深複製(deep copy)和淺複製(shallow copy)是用於複製資料結構(如列表或字典)的兩種不同方式,它們有以下區別:
淺複製(Shallow Copy):
淺複製建立一個新的物件,然後將原始物件中的元素(如果是可變物件)複製到新物件中。但是,如果元素本身也是一個可變物件,則新物件中的元素和原始物件中的元素將共享相同的記憶體地址,因此修改其中一個物件中的元素會影響到另一個物件中相同位置的元素。
淺複製可以使用 copy() 方法來實現,或者使用切片運算子 [:]。
深複製(Deep Copy):
深複製建立一個新的物件,並且遞迴地複製原始物件中的所有元素及其巢狀物件,因此新物件中的元素與原始物件中的元素完全獨立,彼此之間沒有關聯。
深複製可以使用 copy.deepcopy() 函式來實現。
下面是深複製和淺複製的示例:
import copy
# 原始列表
original_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# 淺複製
shallow_copy = copy.copy(original_list)
# 修改原始列表中的一個元素
original_list[0][0] = 100
# 列印淺複製和原始列表
print("淺複製:", shallow_copy)
print("原始列表:", original_list)
# 深複製
deep_copy = copy.deepcopy(original_list)
# 修改原始列表中的一個元素
original_list[1][1] = 200
# 列印深複製和原始列表
print("深複製:", deep_copy)
print("原始列表:", original_list)
輸出結果如下所示:
淺複製: [[100, 2, 3], [4, 5, 6], [7, 8, 9]]
原始列表: [[100, 2, 3], [4, 5, 6], [7, 8, 9]]
深複製: [[100, 2, 3], [4, 5, 6], [7, 8, 9]]
原始列表: [[100, 2, 3], [4, 200, 6], [7, 8, 9]]
可以看到,淺複製的列表中的第一個子列表被修改後,淺複製中的對應元素也被修改了,而深複製則不受影響。