浅拷贝与深拷贝的实现方式、区别;deepcopy如果你来设计,如何实现;

copy浅拷贝:没有拷贝子对象,所以原始数据改变,子对象改变

deepcopy深拷贝:包含对象里面的子对象的拷贝,所以原始对象的改变不会造成深拷贝里的任何子元素的改变

Python里的赋值符号“=”只是将对象进行了引用,如果想新开辟进行了引用,如果想新开辟地址new出一个新对象,要用copy模块里copy.copy(),但是用这个方法得到的对象就是新对象,但是数据还是引用。

如果要完全得到一个一模一样的对象,要用copy.deepcopy()方法。这样,在改变更新对象的时候,原对象才能不受影响,也就是保持原始数据不变。

如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值——相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象——相当于通过“传值”来传递对象。

Python通过引用计数机制实现自动垃圾回收功能,Python中的每个对象都有一个引用计数,用来计数该对象在不同场所分别被引用了多少次。每当引用一次Python对象,相应的引用计数就增1,每当消毁一次Python对象,则相应的引用就减1,只有当引用计数为零时,才真正从内存中删除Python对象。

Python提供了3种复制方法,最常见的=、copy.copy()、copy.deepcopy()。下面通过一段代码来看这三种复制方法的异同。

以上运行结果:

打印出了各个对象的ID值,如果id一样,毫无疑问就是同一个对象。当调用默认复制函数时,形参的id和实参的id是相同的,也就是说的同一个对象,而调用copy模块拷贝时形参id和实参id不同,也就是说是不同的对象。注意观察列表中的最后一个dict元素。默认的=复制和copy复制得到的id是相同的,也就是说他们是同一个对象,而deepcopy的id和其他都不一样,也就是说是新对象。

欢迎关注小婷儿的博客:

csdn:https://blog.csdn.net/u010986753

博客园:http://www.cnblogs.com/xxtalhr/

有问题请在博客下留言或加QQ群:483766429 或联系作者本人 QQ :87605025

OCP培训说明连接:https://mp.weixin.qq.com/s/2cymJ4xiBPtTaHu16HkiuA

OCM培训说明连接:https://mp.weixin.qq.com/s/7-R6Cz8RcJKduVv6YlAxJA

小婷儿的python正在成长中,其中还有很多不足之处,随着学习和工作的深入,会对以往的博客内容逐步改进和完善哒。

小婷儿的python正在成长中,其中还有很多不足之处,随着学习和工作的深入,会对以往的博客内容逐步改进和完善哒。

小婷儿的python正在成长中,其中还有很多不足之处,随着学习和工作的深入,会对以往的博客内容逐步改进和完善哒。

重要的事说三遍。。。。。。

最新文章

  1. 主机巡检脚本:OSWatcher.sh
  2. 【初识——最大流】 hdu 1532 Drainage Ditches(最大流) USACO 93
  3. HttpSolrServer-采用静态工厂方法,创建HttpSolrServer单实例
  4. nginx+php-fpm 502 bad gateway
  5. css 权威指南笔记(四)选择器
  6. 谷歌制图服务(Google Chart)接口生成二维码
  7. SQL Server两种分页的存储过程介绍
  8. linux之SQL语句简明教程---HAVING
  9. 状态开关按钮(ToggleButton)与开关(Switch)的功能与用法
  10. shadow dom 隔离代码 封装
  11. 18_Python列表常用方法总结
  12. URI记录
  13. mysql select column default value if is null
  14. beego学习2 控制器与路由
  15. ActiveReports 大数据分析报告:2019软件开发者现状
  16. vue2.0安装
  17. css3实现旋转表
  18. android 开发 View _13 绘制图片与BitmapShader位图的图像渲染器
  19. Liunx-常用命令杂烩(5)
  20. 删除n天前的所有目录和文件

热门文章

  1. UI-12组结对编程作业总结
  2. 本地服务器搭建服务:mysql
  3. redis下载地址
  4. CSS让DIV按照背景图片的比例缩放,并让背景图片填充整个元素(转)
  5. 前端开发笔记(3)css基础(中)
  6. ActiveReports 报表应用教程 (16)---报表导出
  7. 学习笔记(2)——实验室集群LVS配置
  8. Flutter——设置appBar的高度
  9. Google 和 Facebook 如何大规模处理 IT 事件管理 —— 2016 SRE 大会之我见
  10. Oracle EBS AR 收款调整取值