博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python学习系列--深拷贝和浅拷贝
阅读量:6074 次
发布时间:2019-06-20

本文共 710 字,大约阅读时间需要 2 分钟。

  1. 概念

    普通情况下,复制一个对象是不会新开辟内存空间的,只是把新的对象名称指向原有的内存地址,这种操作其实不是算是拷贝,只是新的引用。把新的对象置于新的内存空间中,才是拷贝。在python中,深浅拷贝的区别实际上是拷贝的深度不同。

  2. 操作

    常见的‘=’号就是一种拷贝方式。python在复制对象时实际上是调用copy模块的copy方法,即copy.copy()。而使用copy.deepcopy()函数操作就是深拷贝。对于字符串和数字来说,不管是深拷贝还是浅拷贝,都只是在原有内存地址上的新引用,所以是没有区别的。可以用id()函数来验证内存地址的异同。

  3. 字典的拷贝

    使用浅拷贝时,会生成一个新字典,而新旧字典的id值不同,但是字典中的键值的id是相同的。也就是说,浅拷贝字典时,只会复制字典的最外一层,而内层仍使用原来的内存位置。

    使用深拷贝时,同样会生成一个新字典,字典的id值不同,字典中的键也会生成新的拷贝,但是字典中的键对应的值的id仍然是相同的。那区别在哪里呢?实际上深浅拷贝的区别在于拷贝的层次不同,浅拷贝只拷贝第一层,而深拷贝会拷贝多层(所有层)。如果字典中还嵌套了列表或者字典,那么这些嵌套的层也会被拷贝。

    那字典中的键的值为什么是原来的呢?这是因为,虽然拷贝了字典,但是字典中的值仍然是对原始值(对象)的引用。这时如果改变新字典的值,那么新的引用就产生了,字典的值也就被改变了(与原始值的id不相同)。

  4. 列表和元组的copy

    与字典的copy相同,深浅拷贝的区别在于拷贝的层次不同。

本文转自 拾瓦兴阁 51CTO博客,原文链接:http://blog.51cto.com/ponyjia/1945738

转载地址:http://amigx.baihongyu.com/

你可能感兴趣的文章
使用ansible工具部署ceph
查看>>
linux系列博文---->深入理解linux启动运行原理(一)
查看>>
Android反编译(一) 之反编译JAVA源码
查看>>
结合当前公司发展情况,技术团队情况,设计一个适合的技术团队绩效考核机制...
查看>>
python-45: opener 的使用
查看>>
cad图纸转换完成的pdf格式模糊应该如何操作?
查看>>
Struts2与Struts1区别
查看>>
网站内容禁止复制解决办法
查看>>
Qt多线程
查看>>
我的友情链接
查看>>
Ubuntu12.04 编译android源代码及生成模拟器经历分享
查看>>
KVM网络桥接设置方法
查看>>
Puppet学习手册:Puppet Yum安装
查看>>
我的友情链接
查看>>
ansible学习记录
查看>>
网思科技校园网计费解决方案
查看>>
我的友情链接
查看>>
携程 Apollo分布式部署
查看>>
2017 Hackatari Codeathon B. 2Trees(深搜)(想法)
查看>>
单词统计
查看>>