python deepcopy 丢失_python 引用、copy 与deepcopy
一、引用
a=[1,2,3]
b=a
此为列表引用,a和b的内存地址是一样的,都是指向列表[1,2,3]。其实是一个列表,两个名字。操作其中一个变量改变列表,另外一个变量显示的列表也同时改变。
a=[1,2,3]
b=aprint(id(a))print(id(b))
输出:
2132799892168
2132799892168
a.append(4)print(b)
输出:
[1, 2, 3, 4]
deflis(li):
li.append(4)
a=[1,2,3]
lis(a)print('a=',a)
输出:
a= [1, 2, 3, 4]
可以看到,即使函数没有返回值,列表a的内容也是被改变了。
这是因为不管变量名有多少个,列表其实只有一个。通过任意一个变量名对列表进行操作,列表改变,不管通过哪一个变量名引用列表的内容自然也发生改变。
引用与C语言的指针非常相像。
举个例子:一个人有两个名字张三、李四。如果张三中了500万,那么李四肯定中了500万。李四有1000万财产,张三肯定也有1000万财产。
此处,这个人就相当于列表。张三、李四这两个名字相当于变量名,指向这个人。这个人还可以叫王五、赵六。只要一个名字对应的这个人发生了改变,引用其余的名字时,这个人必然发生了同样的改变。
由于引用是对一个列表进行操作,列表会随着操作进行改变,无法保存原列表。
二、deepcopy
importcopy
a=[1,2,[1,3]]
b=copy.deepcopy(a)print(id(a))print(id(b))print(id(a[2]))
print(id(b[2]))
输出:2599508758664
2599508759880
22393634322642239363470600
a、b的内存地址已经完全不一样,a、b指向的列表完全相互独立,是两个完全不同的列表,相互之间不再存在影响。
三、copy
copy是介于引用和deepcopy之间的一种模式。
对于最外层的列表,相当于deepcopy,相互独立。
但是对于嵌套的列表,他相当于引用
a=[1,2,[1,3]]
b=a.copy()print(id(a))print(id(b))print(id(a[2]))print(id(b[2]))
输出结果:3166059548808
3166059550024
3166059511624
3166059511624
可以看到,对于a、b这两个变量,他们的内存地址是不一样的,相互独立
但是对于嵌套列表a[2]、b[2]来说,内存地址是一样的,是对同一个列表的引用。
同样,对于一个列表a添加一个列表b作为元素,则该元素也会随着列表b的变化而变化
a=[1,2,3]
b=[4,5,6]
a.append(b)
b[0]=0print(a)
输出:
[1, 2, 3, [0, 5, 6]] #可以看到,当b改变后,a[3]也随之改变
若想相互独立,由于b中元素不含有列表,此处可以用copy:
a=[1,2,3]
b=[4,5,6]
a.append(b.copy())
b[0]=0print(a)
输出:
[1, 2, 3, [4, 5, 6]]
如果b中同样嵌套列表,则需要用deepcopy
python deepcopy 丢失_python 引用、copy 与deepcopy相关推荐
- python中deepcopy函数_python中copy()和deepcopy()详解
**首先直接上结论: -–我们寻常意义的复制就是深复制,即将被复制对象完全再复制一遍作为独立的新个体单独存在.所以改变原有被复制对象不会对已经复制出来的新对象产生影响. -–而浅复制并不会产生一个独立 ...
- python对象回收_python 引用,拷贝,对象回收,弱引用
引用 python中,在对对象赋值,参数传递,函数返回等等, 都是引用传递的. 直接copy个例子来[1]: a = [1, 2, 3] b = a b.append(5) print a, b 输出 ...
- python deepcopy 丢失_Python muliple deepcopy行为
像为类定义复制协议这样简单的事情呢?在import copy class Graph(object): def __init__(self): self.data = [1,2,3] self.man ...
- python中copy什么意思_python中copy与deepcopy的区别
spring MVC入门教程 写一个spring mvc后台传值到前台的一个小例子. 分为以下几个步骤: 1.创建web项目. 导入项目包.具体有如下: spring-aop-4.0.4.RELEAS ...
- python global 变量_python 引用全局变量之global
1.global在python中叫关键字,不叫命令 2.global的作用就是引用全局变量到局部作用域中来 3.如果全局变量中没有一个变量a,而函数中写了 globa a这样的语句,那么等于在全局变量 ...
- python traceback 丢失_Python异常模块traceback用法实例分析
本文实例讲述了python异常模块traceback用法.分享给大家供大家参考,具体如下: traceback模块被用来跟踪异常返回信息. 如下例所示: import traceback try: r ...
- python traceback 丢失_Python traceback 异常处理
刚接触Python的时候,简单的异常处理已经可以帮助我们解决大多数问题,但是随着逐渐地深入,我们会发现有很多情况下简单的异常处理已经无法解决问题了,如下代码,单纯的打印异常所能提供的信息会非常有限. ...
- python中deepcopy函数_Python学习笔记函数之copy()和deepcopy()
随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...
- python中copy和deepcopy的区别_python里shadowcopy和deepcopy的区别
python中,经常会需要拷贝特定对象,在此可能就会遇到各种bug,原因就是明白这三种操作的区别,赋值,浅拷贝,深拷贝. 赋值(=),浅拷贝(copy)和深拷贝(deepcopy)比较容易区别开的是赋 ...
最新文章
- 用Leangoo看板工具做办公室采购流程管理
- python版mapreduce题目实现寻找共同好友
- WINDOWS高级窗口的客户区域拖动技术及其应用
- 鸿蒙10 5G手机,继鸿蒙后麒麟V10问世 5G时代国产操作系统将起飞
- MySQL官方备份_Mysqlbackup 备份详解(mysql官方备份工具)
- OpenStack网络的下一步原来这么走 | 技术头条
- X-NUCA全国高校网安联赛7月训练题解
- AI学习笔记(十)卷积神经网络
- qt动画实现抖动和下坠
- 数电课设——基于74系列芯片搭建的交通灯控制系统电路
- [车联网安全自学篇] Android安全之静态逆向APK应用浅析「手动注入smali」+「IDA Pro静态分析so文件」+「IDA Pro基础使用讲解」
- oracle19c报价_Oracle 19C EM
- cmd下迅速打开控制面板、计算机管理、设备管理器
- 渗透测试培训 末日实验室脚本检测演示教程
- adb工具(通用的调试工具、debug工具)操作命令详解
- ubuntu 16.04安装QQ 8.X
- Android自拍相机应用——图片的镜像翻转
- Javascript+webdriverio App自动化demo
- 微信公众平台生成二维码海报是如何做到的?
- BackTrack5里使用OpenVAS
热门文章
- pcie虚拟网卡实现的几种方案
- php 没有重载,PHP 不支持重载
- 解读手机拍照的各个参数(拍照时,上面会有6个符号)
- Id 2020最新版下载地址 一键安装Windows
- Day12_Strings_regular expression
- Android百度ocr相机裁剪,百度OCR文字识别案例_android防止akamp;sk;泄漏版本
- idea调试SpringMvc, 出现:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderL
- 苹果阻绝电商优惠促销,消费者无望低价购买iPhone12
- 平台 - 各种平台汇总 - 学习/实践
- 甩开外包,雄踞榜首:揭开“宫爆老奶奶”成功的秘密