? 1.賦值: 只是復制了新對象的引用,不會開辟新的內存空間。
? 2.淺拷貝: 創建新對象,其內容是原對象的引用。
? ? 淺拷貝有三種形式:切片操作,工廠函數,copy模塊中的copy函數。
? ? 如: lst = [1,2,3,[4,5]]?
? ? 切片操作:lst1 = lst[:] 或者 lst1 = [each for each in lst]? 要注意:list1=lst 和list1=lst[:]的區別
? ? 工廠函數:lst1 = list(lst)
? ? copy函數:lst1 = copy.copy(lst)
? ? 淺拷貝之所以稱為淺拷貝,是它僅僅只拷貝了一層,在lst中有一個嵌套的list[4,5],如果我們修改了它,情況就不一樣了。
? 3.深拷貝:只有一種形式,copy模塊中的deepcopy函數。
? ? ?和淺拷貝對應,深拷貝拷貝了對象的所有元素,包括多層嵌套的元素。
? ? ?深拷貝出來的對象是一個全新的對象,不再與原來的對象有任何關聯。
import copy a = [1, 2, 3, 4, ['a', 'b']] #定義一個列表a b = a #賦值 c = copy.copy(a) #淺拷貝 # c = a[:] d = copy.deepcopy(a) #深拷貝a.append(5) print(a) #[1, 2, 3, 4, ['a', 'b'], 5] #a添加一個元素5 print(b) #[1, 2, 3, 4, ['a', 'b'], 5] #b跟著添加一個元素5 print(c) #[1, 2, 3, 4, ['a', 'b']] #c保持不變 print(d) #[1, 2, 3, 4, ['a', 'b']] #d保持不變a[4].append('c') print(a) #[1, 2, 3, 4, ['a', 'b', 'c'], 5] #a中的list(即a[4])添加一個元素c print(b) #[1, 2, 3, 4, ['a', 'b', 'c'], 5] #b跟著添加一個元素c print(c) #[1, 2, 3, 4, ['a', 'b', 'c']] #c跟著添加一個元素c print(d) #[1, 2, 3, 4, ['a', 'b']] #d保持不變#說明如下: #1.外層添加元素時, 淺拷貝c不會隨原列表a變化而變化;內層list添加元素時,淺拷貝c才會變化。 #2.無論原列表a如何變化,深拷貝d都保持不變。 #3.賦值對象隨著原列表一起變化
參考:
(1).https://www.cnblogs.com/huangbiquan/p/7795152.html?(Python中的賦值(復制)、淺拷貝、深拷貝之間的區別
(2).https://www.cnblogs.com/xueli/p/4952063.html(python的復制,深拷貝和淺拷貝的區別)
?
?