Python —对象的浅拷贝和深拷贝
变量的赋值操作
只是形成两个变量,实际还是指向同一个对象。
浅拷贝
Python 拷贝一般都是浅拷贝(copy.copy)。拷贝时,对象包含的子对象内容不拷贝。因此,源对象和拷贝对象会引用同一个子对象。
深拷贝
使用 copy 模块的 deepcopy 函数,递归拷贝对象中包含的子对象。源对象和拷贝对象 所有的子对象也不同。
区别
浅拷贝:
浅拷贝是对一个对象的顶层拷贝。通俗的理解,拷贝了引用,并没有拷贝内容
a = [1,2,3,4]
b = a
print(id(b)) #61201864
print(id(a)) #61201864
a.append(5)
print(a) # [1, 2, 3, 4, 5]
print(b) # [1, 2, 3, 4, 5]
个人理解:浅拷贝是指向了同一个地址,a的列表改变 b的列表也跟着改变
深拷贝:
深拷贝将其内容拷贝,指向新的地址
a = [1,2,3,4,5]
import copy
c = copy.deepcopy(a)
a.append(6)
print(id(a)) #61201864
print(id(c)) #43768840
print(a) #[1, 2, 3, 4, 5, 6]
print(c) #[1, 2, 3, 4, 5]
个人理解:深拷贝是将其内容拷贝到一个新的地址。a地址里的内容添加东西,c里面不添加。(a和c指向的地址不同)
对于不可变类型,不管是深拷贝还是浅拷贝,地址值和拷贝后的值都是一样的(copy会根据当前拷贝的数据类型是可变还是不可变类型有不同的处理方式)
也可以这样理解:
深拷贝就是完全跟以前就没有任何关系了,原来的对象怎么改都不会影响当前对象
浅拷贝,原对象的list元素改变的话会改变当前对象,如果当前对象中list元素改变了,也同样会影响原对象。
浅拷贝就是藕断丝连
深拷贝就是离婚了
Python —对象的浅拷贝和深拷贝相关推荐
- 拷贝Python对象、浅拷贝、深拷贝
浅拷贝和深拷贝在C++中出现和使用的较多,python也有相应的用法. test1 = ['a','c','b','d','f'] print id(test1) test2 = test1 prin ...
- Python对象的浅拷贝与深拷贝
在讲我们深浅拷贝之前,我们需要先区分一下拷贝和赋值的概念.看下面的例子 a = [1,2,3] 赋值: b = a 拷贝: b = a.copy() 上面的两行代码究竟有什么不同呢?带着这个问题,继续 ...
- 对象的浅拷贝和深拷贝
对象的浅拷贝和深拷贝 简要介绍 代码实现 简要介绍 浅拷贝:python拷贝一般都是浅拷贝.拷贝时,对象包含的子对象内容不拷贝.因此,源对象和拷贝对象引用同一个对象 深拷贝:使用copy模块的deep ...
- Python copy模块浅拷贝和深拷贝
Python copy模块浅拷贝和深拷贝 在开发中,经常涉及到数据的传递,在数据传递使用的过程中,可能会对数据进行修改. 对数据进行处理后,如果在后面的代码中,即需要使用修改之前的数据,也需要使用修改 ...
- Python中的浅拷贝和深拷贝(一看就懂!!!)
浅拷贝和深拷贝一直傻傻的分不清,甚至有时候会理解反.今天就简单总结一下python中的浅拷贝和深拷贝. 总结 最直观的理解就是: 1.深拷贝,拷贝的程度深,自己新开辟了一块内存,将被拷贝内容全部拷贝过 ...
- python中不可变对象_Python中的可变对象与不可变对象、浅拷贝与深拷贝
Python中的对象分为可变与不可变,有必要了解一下,这会影响到python对象的赋值与拷贝.而拷贝也有深浅之别. 不可变对象 简单说就是某个对象存放在内存中,这块内存中的值是不能改变的,变量指向这块 ...
- Python赋值、浅拷贝、深拷贝
一.赋值(assignment) >>> a = [1, 2, 3] >>> b = a >>> print(id(a), id(b), sep= ...
- Python 赋值、浅拷贝、深拷贝的区别?
http://songlee24.github.io/2014/08/15/python-FAQ-02/ 在写Python过程中,经常会遇到对象的拷贝,如果不理解浅拷贝和深拷贝的概念,你的代码就可能出 ...
- Python——赋值、浅拷贝、深拷贝
和很多语言一样,Python中也分为简单赋值.浅拷贝.深拷贝这几种"拷贝"方式. 在学习过程中,一开始对浅拷贝理解很模糊.不过经过一系列的实验后,我发现对这三者的概念有了进一步的了 ...
最新文章
- ASP.NET在IE10中Form表单身份验证失效问题解决方法
- php 下载网络文件,PHP实现文件下载
- 【工作分解法】IT人,你的工作“轻松”么?
- handsontable 方法汇总
- 大数据的“媒体玩法”
- OCI runtime create failed: container_linux.go:370: starting container process caused: process_linux.
- 2020年商用的5G,中兴通讯已经下了哪些先手棋?
- GitHub网页版开始教程
- JS 绘制 Cardinal 样条曲线
- fastdfs原理及过程
- 兄弟Brother DCP-1519 驱动
- 读书笔记-------修炼之道互联网产品从设计到运营
- 通过举例彻底搞懂Matlab中max函数和min函数的用法(求最大值和最小值)
- 白盒测试技术—逻辑覆盖方法
- Python 结巴(jieba)库之花拳绣腿
- 文件被清理了怎么恢复
- 学号20189220余超 2018-2019-2 《密码与安全新技术专题》第一周作业
- 电源电路设计常用软件,哪个适合你的应用?
- PM2.5污染物的空间地图分区统计到表(第二种)
- python电影评分数据分析