码迷,mamicode.com
首页 > 编程语言 > 详细

python copy与deepcopy (拷贝与深拷贝)

时间:2018-03-11 23:58:16      阅读:293      评论:0      收藏:0      [点我收藏+]

标签:印象   list   port   影响   不同   函数   个数   gpo   python   

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 (拷贝与深拷贝)

标签:印象   list   port   影响   不同   函数   个数   gpo   python   

原文地址:https://www.cnblogs.com/FMS-Shaw/p/8546217.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!