python中深復制和淺復制區別


在python中,對象賦值實際上是對象的的引用,當創建一個對象,然后把它賦值給另外一個變量的時候,python沒有拷貝這個對象,而只是拷貝了這個對象的引用,多以就出現了淺復制,即復制后原對象改變后,復制出來的對象也會改變,要防止復制出來的對象改變,就要使用深復制

python復制三種方式

(1)直接賦值,傳遞對象的引用而已。原始列表改變,被賦值的對象也會做相同改變

1 list1 = [1,2,'a',[4,'ss']]
2 list2 = list1
3 print(list2)  #result;[1, 2, 'a', [4, 'ss']]
4 print(list3)
5 list1.append(10)
6 print(list1,list2)  #[1, 2, 'a', [4, 'ss'], 10] [1, 2, 'a', [4, 'ss'], 10]

(2)copy淺復制,沒有拷貝子對象,所以原始數據改變,子對象也會發生變化

  注:copy淺復制與list[:]效果一致

1 list1 = [1,2,'a',[4,'ss']]
2 import copy 3 list2 = copy.copy(list1) 4 print(list2) #[1, 2, 'a', [4, 'ss']] 5 list1.append('c') 6 print(list1,list2) #[1, 2, 'a', [4, 'ss'], 'c'] [1, 2, 'a', [4, 'ss']] 7 list1[3].append(5) 8 print(list1,list2) #里面的子對象被改變了[1, 2, 'a', [4, 'ss', 5], 'c'] [1, 2, 'a', [4, 'ss', 5]]

(3)深拷貝,包含對象里面的自對象的拷貝,所以原始對象的改變不會造成深拷貝里任何子元素的改變

1 list1 = [1,2,'a',[4,'ss']]
2 import copy
3 list2 = copy.deepcopy(list1)
4 print(list2)  #[1, 2, 'a', [4, 'ss']]
5 list1.append('c')
6 print(list1,list2)  #list2始終沒有變[1, 2, 'a', [4, 'ss'], 'c'] [1, 2, 'a', [4, 'ss']]
7 list1[3].append(5)
8 print(list1,list2)  #list2始終沒有變[1, 2, 'a', [4, 'ss', 5], 'c'] [1, 2, 'a', [4, 'ss']]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM