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的操作的不管是内层还是外层数据对象都拥有不同的地址空间,修改其中的值不会对两个对象都造成影响

posted @ 2018-03-11 22:47  Shaw_LAU  阅读(14928)  评论(0编辑  收藏  举报