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