python基礎學習9—-深淺拷貝

sfencs發表於2018-09-07

資料型別有可變型別和不可變型別

不可變型別:整型,長整型,浮點數,複數,布林,字串,元組

可變型別:列表,字典

 

淺拷貝

簡單說只對第一層進行拷貝,如下對於列表中的列表的資料進行改變,list1和list2會相互影響

實際是list1和list2中的列表[1,2]的記憶體地址儲存的是相同的,改變的是[1,2]記憶體地址所指向的資料,所以list1和list2會相互有影響

list1=[[1,2],3,4]
list2=list1.copy()#淺拷貝
list2[1]=5
print(list1)#[[1, 2], 3, 4]
print(list2)#[[1, 2], 5, 4]

list2[0][0]=6
print(list1)#[[6, 2], 3, 4]
print(list2)#[[6, 2], 5, 4]

深拷貝

將內容複製的更徹底,重新開闢記憶體空間,list1和list2相互沒有影響

import copy

list1=[[1,2],3,4]
list2=copy.deepcopy(list1)#深拷貝
#list2=copy.copy(list1)此處若這樣寫則和淺拷貝相同
list2[1]=5
print(list1)#[[1, 2], 3, 4]
print(list2)#[[1, 2], 5, 4]

list2[0][0]=6
print(list1)#[[1, 2], 3, 4]
print(list2)#[[6, 2], 5, 4]

 

對於全部都是不可變型別的資料,無論是淺拷貝還是深拷貝,最終兩個資料指向的地址都是相同的

import copy

list1=[[1,2],3,4]
list2=copy.deepcopy(list1)
print(id(list1))#2517190549256
print(id(list2))#2517190547976
#此處兩個id不同

a = 1
b = copy.deepcopy(a)
print(id(a))#140705811977248
print(id(b))#140705811977248
#此處兩個id相同

  

相關文章