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


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的操作的不管是內層還是外層數據對象都擁有不同的地址空間,修改其中的值不會對兩個對象都造成影響


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM