1. 程式人生 > >python copy與deepcopy (拷貝與深拷貝)

python copy與deepcopy (拷貝與深拷貝)

int clas 相同 pre 印象 不同的 copy 怎樣 結果

copy與deepcopy

python 中的copy與deepcopy是內存數據的操作,但是兩個函數有一定的區別。

1.copy

import copy
list = [1, [4, 5, 6], 2, 3]
list1 = copy.copy(list)

print id(list)

print id(list[1]) print id(list1) print id(list1[1]) list[2] = 100 list[1][0] = 44 print list print list1 結果: 46925320 46912776 46967368 46912776 [1, [44, 5, 6], 100, 3] [
1, [44, 5, 6], 2, 3]

經過copy操作的得兩個list,list1擁有兩個同的地址(46925320和46967368),修改list時不會影響list1的值,但是 list中間的子列表[4,5,6]在list和list1中有相同的地址46912776,所以在修改list中的子列表會影響到list1中的子列表。

2.deepcopy

import copy
list = [1, [4, 5, 6], 2, 3]
list2 = copy.deepcopy(list)

print id(list)
print id(list[1])
print id(list2)
print
id(list2[1]) list[2] = 100 list[1][0] = 44 print list print list2 結果: 59508232 59495688 59509384 59508168 [1, [44, 5, 6], 100, 3] [1, [4, 5, 6], 2, 3]

經過deepcopy的list與list2用有不用的地址59508232,59509384,其中的子列表頁擁有不同的地址, 所以不論怎樣修改list都不用影響到list2。

結論:

經過copy操作的兩個數據對象擁有不同的得地址空間 ,但是這個數據對象如果是內嵌了其他的復雜數據對象,這個內嵌的數據對象在

兩個數據對象中擁有相同的地址空間,修改其中的值會互相印象。經過deepcopy的操作的不管是內層還是外層數據對象都擁有不同的地址空間,修改其中的值不會對兩個對象都造成影響

python copy與deepcopy (拷貝與深拷貝)