1. 程式人生 > >python 拷貝、淺拷貝、深拷貝之間的聯絡

python 拷貝、淺拷貝、深拷貝之間的聯絡

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")
#***************************************************

#***************************************************
#***************************************************
#***************************************************

在這裡插入圖片描述