简述python中的深浅拷贝
说到什么是深浅拷贝,就不得不说python中赋值的含义,赋值并不是拷贝,而是将target(变量名)和object(对象本身)建立了一种联系,当一个object可变时,连接该object的任意一个target改变该object值都会影响其他连接该object的target的取值。如:
>>> a=[1,2,3]
>>> b=a
>>> b[0]=0
>>> b
[0, 2, 3]
>>> a
[0, 2, 3]
那如果只想改变一个mutable object的值,而它原来的值还保留,该怎么办呢?答案就是拷贝,通过python 内建库copy。
而拷贝又分为深拷贝(copy.deepcopy)和浅拷贝(copy.copy),深浅拷贝的区别在于对“复合对象”(即该对象还包含了其他对象,如list,dict等)时拷贝的不同:
对于浅拷贝,新建一个“复合对象”,该对象包含的是被拷贝对象的reference;
对于深拷贝,新建一个“复合对象”,尽量的把被拷贝对象中含有的对象全都深拷贝;
如:
-------------------------shallow copy-------------------
>>> a=[1,2,3]
>>> c=a.copy()
>>> c
[0, 2, 3]
>>> c[0]=4
>>> c
[4, 2, 3]
>>> a
[0, 2, 3] >>> d=[[0,1],2,3]
>>> e=d.copy()
>>> e[0][0]=100
>>> e
[[100, 1], 2, 3]
>>> d
[[100, 1], 2, 3] ----------------------deep copy--------------------------
>>> import copy
>>> f=copy.deepcopy(d)
>>> d
[[100, 1], 2, 3]
>>> f
[[100, 1], 2, 3]
>>> f[0][0]=5
>>> f
[[5, 1], 2, 3]
>>> d
[[100, 1], 2, 3] >>> g=[[[1],2]]
>>> h=copy.deepcopy(g)
>>> h[0][0][0]=100
>>> h
[[[100], 2]]
>>> g
[[[1], 2]]
当然,对于list,dict自身的copy方法都是shallow copy
简述python中的深浅拷贝的更多相关文章
- 天啦噜!仅仅5张图,彻底搞懂Python中的深浅拷贝
Python中的深浅拷贝 在讲深浅拷贝之前,我们先重温一下 is 和==的区别. 在判断对象是否相等比较的时候我们可以用is 和 == is:比较两个对象的引用是否相同,即 它们的id 是否一样 == ...
- Python 中的深浅拷贝
Python 中的深浅拷贝 参考文献:https://blog.csdn.net/lnotime/article/details/81194633 参考文献:https://blog.csdn.net ...
- Python中的深浅拷贝
1.什么是深浅拷贝? python中一切皆对象,python中的数字.字符串.元组等,如果存放在了内存中,这部分内存里面的内容是不会改变的,但是也有情况,内存中存放了可变对象,比如说列表和字典,他们的 ...
- Python基础【3】:Python中的深浅拷贝解析
深浅拷贝 在研究Python的深浅拷贝区别前需要先弄清楚以下的一些基础概念: 变量--引用--对象(可变对象,不可变对象) 切片(序列化对象)--拷贝(深拷贝,浅拷贝) 我是铺垫~ 一.[变量--引用 ...
- 挖一挖python中的深浅拷贝问题
前几天在做面试题的时候,遇到一个与Python深浅拷贝的问题,今天总结出来一个方法,能够快速判断在对一个对象复制后,新对象与原来对象是否会互相影响的方法. 先抛出结论,然后我们对结论进行验证~~~ 先 ...
- Python中的深浅拷贝,赋值及引用
简单来说,若对象a中存的是列表或字典等可变对象,b对a的浅拷贝只是对对象第一层的复制,修改b第二层的元素仍然会影响两个对象. 深拷贝则是不会影响原来的对象. import copy.copy() 浅拷 ...
- 【Python】Python中的深浅拷贝
[转]python 复制(拷贝)对象 -- ::| 分类: Python |举报|字号 订阅 下载LOFTER我的照片书 | 需求: 你想复制一个对象.因为在Python中,无论你把对象做为参数传递, ...
- 浅谈Python中的深浅拷贝的区别
深.浅拷贝总结 深拷贝 拷贝可变数据类型,如列表容器: a = [1, 2, [3, 4]] b = copy.deepcopy(a) a 与 b 所指的列表容器的空间地址不一致,即 id(a) != ...
- 关于Python中的深浅拷贝
之前一直认为浅拷贝是拷贝内容的第一层,但是不开辟内存,只是增加新的指向原来的内容:深拷贝是拷贝是拷贝每一层并开辟内存. 其实这个是不严谨的不正确的. 从以上可以看出,浅拷贝中当时可变类型的时候,内存是 ...
- js中的深浅拷贝
js中的深浅拷贝 js中有深拷贝.浅拷贝一说,所谓的深浅拷贝是针对value类型为引用类型(函数.对象.数组)而言的,大概理解的就是: 浅拷贝: 拷贝出的对象c和原始对象o,c和o在key对应的val ...
随机推荐
- BUUCTF-Web方向21-25wp
[HCTF 2018]admin 打开环境,有三处提示,一个跳转链接,一个登录注册,一个提示不是admin 点击hctf,无法访问 注册个账号,依旧无法查看,看来需要admin账号 弱口令 爆破密码 ...
- 大数据之路Week10_day01 (练习:通过设计rowkey来实现查询需求)
1.准备数据 链接:https://pan.baidu.com/s/1fRECXp0oWM1xgxc0uoniAA 提取码:4k43 2.需求如下 (1)查询出10条某个人的最近出现的位置信息 (2) ...
- python 二级 组合数据类型
1.集合特点 set 使用{}表示 无序 内容不重复 2.集合的操作:&.!.-.^ 序列特点 有序 4.序列常用的函数 5.列表函数 6.列表方法 s=[1,2,3] a=[5,6] 增加: ...
- 如何基于大语言模型和MaxKB实现PPT自动生成方案
一.实现方案 利用讯飞大模型智能 PPT 生成接口实现,具体参见:讯飞开放平台智能PPT生成 https://www.xfyun.cn/services/aippt#anchor4503211 二.新 ...
- C/C++显示类型转换的位拓展方式
最近用verilator写模块的tb,在这里卡了好久(测半天都是C++写的问题) 要点 变量从小位宽到大位宽显示类型转换(explicit cast)时的位拓展方式,取决于转换前变量的符号性. 倘若转 ...
- Manjora配置记录
22/9/12 目前的启动项有3:Windows Boot Manager.Manjaro.UEFI OS.其中UEFI OS 和 Manjaro 进入后内容相同:Windows下检测不到Manjar ...
- 【P0】Logisim部件级实验/有限状态机
课上 过得十分狼狈.经鉴定孩子可能脑子拗 T1 投票决议 组内投票,赞成>反对,则通过:组长拥有一票否决权. 信号名 方向 描述 [1:0] s Input 2'b00 赞成2'b01 反对2' ...
- 【MIPS】经典指令块集锦
Directives声明变量值存储 容易将数据段地址和地址上的内容搞混 .data fibs: .space 48 # allocate 12 * 4 = 48 Byte memory, store ...
- IvorySQL 4.0 之 Invisible Column 功能解析
前言 随着数据库应用场景的多样化,用户对数据管理的灵活性和隐私性提出了更高要求.IvorySQL 作为一款基于 PostgreSQL 并兼容 Oracle 的开源数据库,始终致力于在功能上保持领先和创 ...
- 通俗易懂分布式事务之2PC、3PC、Seata AT模式、Seata TCC模式
通俗易懂分布式事务之2PC.3PC.AT.TCC 单机服务事务提交回滚操作是需要拿到Connection对象,调用提交commit方法或者rollback方法回滚的,例如下面操作 Connection ...