python的深浅拷贝

测试环境:python 2.7

需要使用到模块 copy.py

 

该模块内有两个方法

copy.copy()  #浅拷贝

copy.deepcopy()  #深拷贝

浅拷贝与深拷贝的区别:

浅拷贝只能拷贝第一层的内容

深拷贝可以拷贝从外到内n层的内容

 

请看例子:

list1 = [1,2,3,4]
list2 = list1
list1.append(99)
print list2

打印结果:list2 = [1,2,3,4,99]

说明:在python中,对变量进行引用类型的赋值时,相当于把地址赋值给了变量

对引用类型的介绍:http://www.cnblogs.com/gametesting/p/7159398.html

为了解决这个问题,我们可以使用切片操作:

list2 = list1[:]

同时,我们也可以引入浅拷贝的概念,只拷贝值

 

list1 = [1,2,3,4]
list2 = copy.copy(list1)
list1.append(99)
print list2

打印结果:list2 = [1,2,3,4]

修改list1的时候,并没有对list2进行修改

我们也可以在copy.copy()完成后,借助于id(list1),id(list2)对比,可以发现二者的内存地址并不相同,使用浅拷贝相当于把list1的值拷贝到一块新的内存区域,然后赋值给list2

 

但是,当list1 = [1,2,3,4,[1,2]] (操作对象超过一维的时候)时

我们使用浅拷贝,就没用了

(代码省略),使用浅拷贝后,发现,修改list1的值,还是会修改list2的值

 

这时候,我们就需要用到深拷贝copy.deepcopy()

list1 = [1,2,3,4,[1,2]]
list2 = copy.deepcopy(list1)
list1[4].append(99)
print list2

 打印结果,完美解决问题

 

posted on 2017-08-16 13:51  兰冰点点 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/gametesting/p/7373014.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值