python中的深拷贝和浅拷贝
来源:互联网 发布:2017淘宝刷不了单 编辑:程序博客网 时间:2024/05/27 09:46
在叙述深拷贝和浅拷贝前,我觉得很有必要说一下变量赋值的原理。首先看一下下面的代码例子。
赋值原理
a = 3;b = a;id(b) ==id(a)
结果是True,其实有过其他语言学习的人很容易就明白。赋给a的是3这个数的地址,而b=a 也只是把a内存的地址赋值给b,所以两者此时存的数据(或者叫地址)是一样的。这就造成了无论你修改a或b结果都是对同一个数据进行操作的。所以无法保证,a的修改不影响到b,或者相反。
怎样实现不影响源的拷贝
如果不想改变源的值,有两种方法:切片 和 copy模块。切片技术应用于所有的序列,包括:列表、字符串、元祖 。但切片不能应用于字典。对字典只能使用copy()方法或deepcopy()方法。什么是切片呢?其实就是取出一个范围内的元素。
浅拷贝
只拷贝顶级的对象,或者说,只拷贝父级对象。也就是说父级对象里还有子对象的时候,其实也是把该父级对象的地址赋给了新的变量,而不是把元素值赋给新变量,这样一来就造成了一种隐含的错误,当我们对有子对象的父级对象进行操作时,会同时影响源和目的对象。换句话说如果父级对象下没有子对象,其实浅拷贝和深拷贝是一样的。见下面的验证。
程序
import copysrc = [1,'lemon','a',45]dst_1 = copy.copy(src)dst_2 = copy.deepcopy(src)dst_1[2] ='love you'#src 和dst_1各自独立 print(src)print(dst_1)print(dst_2)
你会发现dst_1和src并不影响,两者在独立的内存空间中。
深拷贝
但是如果父对象下有子对象,这样的情况,倘若你修改的就是其子对象,这时也会同时影响两个变量的。
所以此时只能用深拷贝进行拷贝,使两个变量指向的内存空间不一样。
深拷贝:拷贝所有对象,顶级对象及其嵌套对象。或者说:父级对象及其子对象
程序
src =[23,'mike','a',[1,2,3]]import copydst_1 = copy.copy(src)dst_2 = copy.deepcopy(src)dst_1[3][0]=99#此时src 的元素和dst_1的元素一样的改变了print(src)print(dst_1)print(dst_2)
阅读全文
0 0
- python中的深拷贝和浅拷贝
- python中的深拷贝和浅拷贝
- python 中的深拷贝和浅拷贝
- python中的深拷贝和浅拷贝
- python中的深拷贝和浅拷贝
- python 中的深拷贝和浅拷贝
- Python中的浅拷贝和深拷贝
- python中的浅拷贝和深拷贝
- python中的深拷贝和浅拷贝
- python中的深拷贝和浅拷贝理解
- python中的深拷贝和浅拷贝理解
- python中的深拷贝和浅拷贝理解
- python中的深拷贝和浅拷贝理解
- python中的深拷贝和浅拷贝理解
- python中的深拷贝和浅拷贝理解
- python中的深拷贝和浅拷贝理解
- python中的深拷贝和浅拷贝理解
- Python中的深拷贝和浅拷贝详解
- OpenCV3.0+VS2013+Windows7开发环境搭建
- windows C++ 遍历目录,获取文件名和文件路径
- supervisord监控服务常用技巧
- android格式布局和videoview
- C语言32个关键字
- python中的深拷贝和浅拷贝
- 矫正牙齿没那么容易,但是年龄也不是限制因素
- Subsequence --二分法
- 水果 HDU
- vmware11配置vmware-tools实现windows文件与vm文件共享
- 中国象棋的跳马问题(BFS)
- css滤镜技术
- Excel统计出现次数
- 关于ios开发framework及.a文件支持架构判断以及合并