python中的拷贝
再说拷贝之前先说一说 is 与 ==
is 的作用是 比较两个引用是否为一个地址
== 是比较两个值

对变量 a 变量 b 都赋值为 2 : a 与 b 的值相等我们都可以理解,但是a与b引用地址也相同是为什么呢?
a和b中实际存储的就是一条地址,因为都赋值为2,所以就都存了内存单元中2的地址。也就是说如果增加一个变量c ,另c=a或c=b,那么c也指向的是2的内存地址;
接下来说拷贝,拷贝与 ‘=’ 赋值不同,拷贝是在建立一个空间,与原有的内容断开了联系。
深拷贝与浅拷贝:
进行拷贝首先引入copy模块 import copy
浅拷贝: copy.copy()
例如 a = copy.copy(b)

说到这里可能有人发现了一些小错误,不是说拷贝是另建空间吗?怎么使用了拷贝后 b is a 还是true?
这里有涉及到了python对内存操作中的一点小知识:
在 python 中数字 字符串,元组这些是不可变类型的,他们在内存中如果创建了地址就是固定的,如果另一个变量值也为这些,那么就会指向这个地址而不会再创建。所以即使使用了copy,也还是这个地址。而像列表等可变类型就会是另一种结果:

用一个可变类型列表来分别执行浅拷贝与赋值操作这样对比是不是更加容易理解呢
浅拷贝只是对于一个对象的顶层拷贝:
什么是顶层拷贝呢? 举个栗子:

对列表a进行拷贝 ,b 和 a 是一样的

对 a 追加一个元素,b并未发生改变
如果是赋值的话,a变,b也会变。
回到拷贝上我们再对 a 追加一个元素

当对列表a中的列表增加一个元素时,b中的列表也相应增加了。
所以浅拷贝只是对对象的顶层拷贝,并未真正断了所有联系!
深拷贝:copy.deepcopy()
例如 a = copy.deepcopy(b)
深拷贝与浅拷贝的区别就是深拷贝彻底断了所有联系!
再次使用上面的实例演示一下:



由以上操作可以看出,深拷贝是一种底层递归拷贝。
在深拷贝的操作下,a与b之间是完全断了联系的!
python中的拷贝的更多相关文章
- python中深浅拷贝
python的复制,深拷贝和浅拷贝的区别 在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 一 ...
- Python中深浅拷贝 垃圾回收与 super继承(六)
1 python拷贝 深拷贝,浅拷贝 与引用三者的区别 import copy a = [1, 2, 3, 4, ['a', 'b']] #原始对象 b = a #赋值,传对象的引用 c = copy ...
- 谈谈Python中对象拷贝
你想复制一个对象?因为在Python中,无论你把对象做为参数传递,做为函数返回值,都是引用传递的. 何谓引用传递,我们来看一个C++交换两个数的函数: void swap(int &a, in ...
- 图解Python中深浅拷贝
在工作中,常涉及到数据的传递,在数据传递使用过程中,可能会发生数据被修改的问题.为了防止数据被修改,就需要在传递一个副本,即使副本被修改,也不会影响原数据的使用.为了生成这个副本,就产生了拷贝.今天就 ...
- Python中的深浅拷贝
1.什么是深浅拷贝? python中一切皆对象,python中的数字.字符串.元组等,如果存放在了内存中,这部分内存里面的内容是不会改变的,但是也有情况,内存中存放了可变对象,比如说列表和字典,他们的 ...
- python中的深拷贝和潜拷贝
>>> a = ['ace',['age',10]] >>> b = a[:] >>> c = list(a) >>> for ...
- Python中的变量、引用、拷贝和作用域
在Python中,变量是没有类型的,这和以往看到的大部分编辑语言都不一样.在使用变量的时候,不需要提前声明,只需要给这个变量赋值即可.但是,当用变量的时候,必须要给这个变量赋值:如果只写一个变量,而没 ...
- python中的对象拷贝
python中.进行函数參数传递或者返回值时,假设是一般的变量,会拷贝传递.假设是列表或字典则是引用传递.那python怎样对列表和字典进行拷贝传递呢:标准库的copy模块提供了两个方法:copy和d ...
- Python中的深浅拷贝,赋值及引用
简单来说,若对象a中存的是列表或字典等可变对象,b对a的浅拷贝只是对对象第一层的复制,修改b第二层的元素仍然会影响两个对象. 深拷贝则是不会影响原来的对象. import copy.copy() 浅拷 ...
随机推荐
- hadoop3.1.1 HA高可用分布式集群安装部署
1.环境介绍 涉及到软件下载地址:https://pan.baidu.com/s/1hpcXUSJe85EsU9ara48MsQ 服务器:CentOS 6.8 其中:2 台 namenode.3 台 ...
- linux下建立多级文件目录
linux下使用mkdir可以创建目录,使用mkdir -p参数就可以创建: mkdir -p /home/orale/duqiang1/duqiang2 如果父目录存在也不会报错.
- the MTS failed last time时的解决办法
关于6.6.3SP2版本提示The MTS failed last time 1.1 发生前提条件 在重启系统 shutdown -r now后,网页打不开,发现MTS服务无法启动,我自己涉及的 ...
- 最小生成树计数 模板 hdu 4408
题意是给定n个点,m条边的无向图,求最小生成树的个数对p取模. 用kruscal计算最小生成树时,每次取连接了两个不同联通块的最小的边.也就是先处理d1条c1长度的边,再处理d2条c2长度的边.长度相 ...
- 解决ubuntu和win10双系统时间不一致
1.在ubuntu下安装ntpdate sudo apt install ntpdate 2.设置同步windows时间 sudo ntpdate time.windows.com 3.把时间更新到硬 ...
- 删除文件时提示,你需来自SYSTEM的权限
1. 提示如下 2. 对要删除的文件操作如下 2.1 为删除的文件添加本地账户 2.2 提示如下,多点几次继续就好 2.3 给本地账户添加完全控制权限
- zabbix-server报错:No route to host
前戏: 我在VM虚拟机中创建了2个liunx系统(rhel7和cent7),一个用作zabbix服务端,另一个用作zabbix客户端.但是用服务端监控客户端时图标是红色的监控不了,报错信息为:Get ...
- oracle中以dba_、user_、v$_、all_、session_、index_开头
原 oracle中以dba_.user_.v$_.all_.session_.index_开头 2011年07月05日 11:26:06 clbxp 阅读数:3279 oracle中以dba_.u ...
- 【PAT甲级】1084 Broken Keyboard (20 分)
题意: 输入两行字符串,输出第一行有而第二行没有的字符(对大小写不敏感且全部以大写输出). AAAAAccepted code: #define HAVE_STRUCT_TIMESPEC #inclu ...
- 洛谷 P1981 表达式求值(模拟)
嗯... 题目链接:https://www.luogu.org/problem/P1981 这道题其实是数组模拟栈.首先处理乘法:注意从后往前处理,处理后归零.然后把数都加起来即可. AC代码: #i ...

