Python中的數組深拷貝是指在新建一個數組時,將原數組的每個元素都重新創建一遍,對應的新數組的元素與原數組是完全獨立的,互不影響。而淺拷貝則是僅僅復制了引用,產生的新數組與原數組指向的是同一個內存地址,因此如果更改新數組的元素,會直接影響原數組。
# 以一個多重嵌套的列表為例子 lst = [[1, 2], [3, 4], [5, 6]] # 淺拷貝 lst2 = lst.copy() # 改變lst2的第一個子列表的第一個元素 lst2[0][0] = 0 # lst也隨之改變 print(lst) # [[0, 2], [3, 4], [5, 6]] # 深拷貝 import copy lst3 = copy.deepcopy(lst) # 改變lst3的第一個子列表的第一個元素 lst3[0][0] = 7 # lst不改變 print(lst) # [[0, 2], [3, 4], [5, 6]]
在上面的例子中,淺拷貝lst.copy()得到的新列表lst2與原列表lst共享每個子列表的引用,因此將lst2中第一個子列表的第一個元素改為0會直接影響到lst。而深拷貝copy.deepcopy(lst)則創建了一個全新的列表lst3,其中每個子列表都是重新創建的,與lst完全相互獨立。
數組深拷貝通常在涉及到多維數組時使用,特別是在復制二維表格等數據結構時,如果使用淺拷貝,可能會導致數據的重復和混亂,甚至會給程序帶來災難性的后果。