1.深拷贝与浅拷贝

  • 直接赋值:其实就是对象的引用(别名)。
  • 浅拷贝(copy):是对于一个对象的顶层拷贝,拷贝父对象,不会拷贝对象的内部的子对象。
  • 深拷贝(deepcopy): 是对于一个对象所有层次的拷贝(递归),完全拷贝了父对象及其子对象。

对象的引用(内存地址)”赋值给变量的,在python中有6个标准数据类型,他们分为可变和不可变两类。

  • 不可变类型:Number(数字)String(字符串)Tuple(元组)
  • 可变类型:List(列表)Dictionary(字典)Set(集合)

浅拷贝(copy)

1.浅拷贝会创建一个新的容器对象(compound object)

2.对于对象中的元素,浅拷贝就只会使用原始元素的引用(内存地址)

常见的浅拷贝操作有:

  • 使用切片操作[:]
  • 使用工厂函数(如list/dict/set)
  • copy模块的copy()方法

注意点:

  1. copy.copy对于不可变类型,不会拷贝,仅仅是指向内存地址.
>>> a="1234567"
>>> b=a
>>> id(a)
4367619440
>>> id(b)
4367619440
>>> c=copy.copy(a)
>>> id(c)
4367619440
>>> d=copy.deepcopy(a)
>>> id(d)
4367619440
  1. copy.copy对于可变类型会进行浅拷贝,生成新的内存地址,但会出现以下两种场景:

1>拷贝对象中无可变类型元素,原对象的元素值改变不影响新对象的元素值.

2>拷贝对象中存在可变类型元素A(例如列表中的子元素是一个字典),拷贝时新对象中可变类型元素A,两者指向同一个内存地址,如果拷贝对象A的值改变,新对象A也会跟着改变.

>>> import copy
>>> list1=[1,2,['a','b']]
>>> list2=list1
>>> list3=copy.copy(list2)
>>> list4=copy.deepcopy(list3)
>>> id(list1)
4338414656
>>> id(list2)
4338414656
>>> id(list3)
4338415016
>>> id(list4)
4338414368
>>> list1[2].append('a')
>>> id(list1)
4338414656
>>> print list1
[1, 2, ['a', 'b', 'a']]
>>> print list3
[1, 2, ['a', 'b', 'a']]
>>> print list4
[1, 2, ['a', 'b']]
>>> list1.append(33)
>>> id(list1)
4338414656
>>> id(list3)
4338415016
>>> print list1
[1, 2, ['a', 'b', 'a'], 33]
>>> print list3
[1, 2, ['a', 'b', 'a']]

深拷贝(deepcopy)

1.深拷贝和浅拷贝一样,都会创建一个新的容器对象(compound object)

2.和浅拷贝的不同点在于,深拷贝对于对象中的元素,深拷贝都会重新生成一个新的对象

深拷贝(deepcopy)与浅拷贝(copy)的区别相关推荐

  1. Python天天美味(22) - 拷贝对象(深拷贝deepcopy与浅拷贝copy)

    Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deep ...

  2. python deepcopy_python中的深拷贝(deepcopy)和浅拷贝(copy)介绍及代码参考

    在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用.以下分两个思路来分别理解浅拷贝和深拷贝: (1) ...

  3. Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)

    http://www.jb51.net/article/15714.htm 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deepcopy 深拷贝 拷贝 ...

  4. python对象复制_Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)

    源码阅读系列:EventBus title: 源码阅读系列:EventBus date: 2016-12-22 16:16:47 tags: 源码阅读 --- EventBus 是人们在日常开发中经常 ...

  5. 深入理解Python深拷贝(deepcopy)、浅拷贝(copy)、等号拷贝----看了还不懂找我

    编程中难免会遇到copy(浅拷贝)与deepcopy(深拷贝)问题,一不小心就会掉进坑中了,或许很多人只知道有深浅拷贝,但是你又知道copy和"="拷贝有什么区别么?也许很少有人对 ...

  6. Python中copy,deepcopy,浅拷贝(“=”)和深拷贝(“copy.deepcopy()”)

    python中对于对象的拷贝分为浅拷贝(copy)和深拷贝(deepcopy)两种方式.其中浅拷贝由"="完成.而深拷贝由copy模块中deepcopy()函数担任. 浅拷贝和深拷 ...

  7. 浅拷贝copy(“=”)和深拷贝(“copy.deepcopy()”)

    python中对于对象的拷贝分为浅拷贝(copy)和深拷贝(deepcopy)两种方式. 其中浅拷贝由"="完成.而深拷贝由copy模块中deepcopy()函数担任. 浅拷贝和深 ...

  8. Python 玩转数据 5 - 图解 Python 赋值,浅拷贝 copy.copy() 和 深拷贝 copy.deepcopy() 原理

    引言 上面文章有介绍 Python 动态类型 共享引用等相关知识,有这个基础,我们来深入研究一下 Python 赋值,拷贝的原理,有涉及到可变类型和不可变类型的不同处理.更多 Pyton 进阶系列文章 ...

  9. XenServer中Fast Copy与Full Copy的区别

    详细跟踪了一下LVM-Based VDI与File-Based VDI的复制与链接过程,我们可以发现,Fast Copy与Full Copy有很大的区别,不同的形式对虚机VBD的性能具有一定的影响. ...

最新文章

  1. 【矩阵运算c++实现】矩阵封装实现Matrix类
  2. 视频专辑:张孝祥Java邮件开发
  3. GitHub 重磅更新:无限私有仓库免费使用
  4. BM微型计算机2283,微型计算机原理及接口技术钢琴课程设计最新.doc
  5. weblogic 安装教程
  6. 人工神经网络之BP神经网络模型
  7. 手机ppt怎么添加页码_全网超详细的操作教程,手把手教你使用高效PPT小技巧!...
  8. DotNetMagic 5.4.0破解
  9. chrome 使用gpu 加速_一招解决 Chrome / Edge 卡顿缓慢 让浏览器重回流畅顺滑
  10. 国家广电总局:常规电视剧剧集正片时长不少于41分钟
  11. Loopback、Null0接口揭秘
  12. 实习成长之路:MySQL四:深入浅出索引
  13. python 小程序——快递分拣程序
  14. 2021年全球与中国汽车TSR(交通标志识别)系统行业市场规模及发展前景分析
  15. Unity3D坦克大战项目总结
  16. 为什么ios比android流畅
  17. 智慧城市投入与产出相关分析预评估模型研究
  18. 新手建网站怎样在运营方面渐入佳境
  19. 王学岗性能优化————APP启动优化(黑白屏问题的解决,trace工具的使用,热启动与冷启动的区别)
  20. ceph cluster client(RBD)

热门文章

  1. Animation Frame动画实现应用的欢迎界面
  2. 兔子生兔子问题(斐波那契数列)
  3. PHP的几种加密解密算法
  4. Apollo学习(超详细)
  5. mybatis -- 懒加载原理
  6. telnet找不到这个服务器,Win7找不到Telnet服务如何解决?Win7找不到Telnet服务的解决方法...
  7. php中stmt是什么意思,PHP的mysqli_stmt_init()函数讲解
  8. 2022年,计算机保研er需要海投吗?
  9. modulate与modem
  10. yolo.h5文件问题的解决 - 吴恩达深度学习:目标检测之YOLO算法