資料型別有可變型別和不可變型別
不可變型別:整型,長整型,浮點數,複數,布林,字串,元組
可變型別:列表,字典
淺拷貝
簡單說只對第一層進行拷貝,如下對於列表中的列表的資料進行改變,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相同