python 拷貝、淺拷貝、深拷貝之間的聯絡
阿新 • • 發佈:2018-12-17
import copy #淺拷貝與深拷貝 #*************************************************** #*************************************************** #*************************************************** #*************************************************** #如果直接把一個列表賦值給另一個列表 #當修改了其中一個列表,另一個怎麼變呢 #照理說m=[1,2,3,4,10,6],d=[1,12,3,4,5,6] #實際m=[1,12,3,4,10,6],d=[1,12,3,4,10,6] #原因:m,d公用同一片記憶體地址,只要資訊變化,兩個都會變,聯動效果 d=[1,2,3,4,5,6] m=d m[4]=10 d[1]=12 print('part1'.center(20,'-')) print m print d print('part1'.center(20,'-')) print("\n") print("\n") #*************************************************** #*************************************************** #*************************************************** #*************************************************** #*************************************************** #*************************************************** #*************************************************** #*************************************************** #如果使用淺拷貝呢 #當修改了其中一個列表,另一個怎麼變呢 #照理說m1=[1,2,3,4,[10,6]],d1=[1,2,3,4,[5,6]],m2=[1,2,3,9,[5,6]] #實際m1=[1, 2, 3, 4, [10, 6]],d1=[1, 2, 3, 4, [10, 6]],m2=[1, 2, 3, 9, [10, 6]] #淺拷貝只能拷貝字典或列表的第一層級,第二及更深層級不起作用。 #原因:m1,d1第二及更深層級公用同一片記憶體地址,只要資訊變化,兩個都會變,聯動效果 d1=[1,2,3,4,[5,6]] m1=copy.copy(d1) m1[4][0]=10 m2=copy.copy(d1) m2[3]=9 print('part2'.center(20,'-')) print m1 print d1 print m2 print('part2'.center(20,'-')) print("\n") print("\n") #*************************************************** #*************************************************** #*************************************************** #*************************************************** #*************************************************** #*************************************************** #*************************************************** #*************************************************** #如果使用深拷貝呢 #此時d1與m1沒有關係,相當於建立了一個新的內容一樣的資料資訊。 d1=[1,2,3,4,[5,6]] m1=copy.deepcopy(d1) m1[4][0]=10 print('part3'.center(20,'-')) print m1 print d1 print('part3'.center(20,'-')) print("\n") print("\n") #*************************************************** #*************************************************** #*************************************************** #***************************************************