一、引用

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相关推荐

  1. python中deepcopy函数_python中copy()和deepcopy()详解

    **首先直接上结论: -–我们寻常意义的复制就是深复制,即将被复制对象完全再复制一遍作为独立的新个体单独存在.所以改变原有被复制对象不会对已经复制出来的新对象产生影响. -–而浅复制并不会产生一个独立 ...

  2. python对象回收_python 引用,拷贝,对象回收,弱引用

    引用 python中,在对对象赋值,参数传递,函数返回等等, 都是引用传递的. 直接copy个例子来[1]: a = [1, 2, 3] b = a b.append(5) print a, b 输出 ...

  3. python deepcopy 丢失_Python muliple deepcopy行为

    像为类定义复制协议这样简单的事情呢?在import copy class Graph(object): def __init__(self): self.data = [1,2,3] self.man ...

  4. python中copy什么意思_python中copy与deepcopy的区别

    spring MVC入门教程 写一个spring mvc后台传值到前台的一个小例子. 分为以下几个步骤: 1.创建web项目. 导入项目包.具体有如下: spring-aop-4.0.4.RELEAS ...

  5. python global 变量_python 引用全局变量之global

    1.global在python中叫关键字,不叫命令 2.global的作用就是引用全局变量到局部作用域中来 3.如果全局变量中没有一个变量a,而函数中写了 globa a这样的语句,那么等于在全局变量 ...

  6. python traceback 丢失_Python异常模块traceback用法实例分析

    本文实例讲述了python异常模块traceback用法.分享给大家供大家参考,具体如下: traceback模块被用来跟踪异常返回信息. 如下例所示: import traceback try: r ...

  7. python traceback 丢失_Python traceback 异常处理

    刚接触Python的时候,简单的异常处理已经可以帮助我们解决大多数问题,但是随着逐渐地深入,我们会发现有很多情况下简单的异常处理已经无法解决问题了,如下代码,单纯的打印异常所能提供的信息会非常有限. ...

  8. python中deepcopy函数_Python学习笔记函数之copy()和deepcopy()

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

  9. python中copy和deepcopy的区别_python里shadowcopy和deepcopy的区别

    python中,经常会需要拷贝特定对象,在此可能就会遇到各种bug,原因就是明白这三种操作的区别,赋值,浅拷贝,深拷贝. 赋值(=),浅拷贝(copy)和深拷贝(deepcopy)比较容易区别开的是赋 ...

最新文章

  1. 用Leangoo看板工具做办公室采购流程管理
  2. python版mapreduce题目实现寻找共同好友
  3. WINDOWS高级窗口的客户区域拖动技术及其应用
  4. 鸿蒙10 5G手机,继鸿蒙后麒麟V10问世 5G时代国产操作系统将起飞
  5. MySQL官方备份_Mysqlbackup 备份详解(mysql官方备份工具)
  6. OpenStack网络的下一步原来这么走 | 技术头条
  7. X-NUCA全国高校网安联赛7月训练题解
  8. AI学习笔记(十)卷积神经网络
  9. qt动画实现抖动和下坠
  10. 数电课设——基于74系列芯片搭建的交通灯控制系统电路
  11. [车联网安全自学篇] Android安全之静态逆向APK应用浅析「手动注入smali」+「IDA Pro静态分析so文件」+「IDA Pro基础使用讲解」
  12. oracle19c报价_Oracle 19C EM
  13. cmd下迅速打开控制面板、计算机管理、设备管理器
  14. 渗透测试培训 末日实验室脚本检测演示教程
  15. adb工具(通用的调试工具、debug工具)操作命令详解
  16. ubuntu 16.04安装QQ 8.X
  17. Android自拍相机应用——图片的镜像翻转
  18. Javascript+webdriverio App自动化demo
  19. 微信公众平台生成二维码海报是如何做到的?
  20. BackTrack5里使用OpenVAS

热门文章

  1. pcie虚拟网卡实现的几种方案
  2. php 没有重载,PHP 不支持重载
  3. 解读手机拍照的各个参数(拍照时,上面会有6个符号)
  4. Id 2020最新版下载地址 一键安装Windows
  5. Day12_Strings_regular expression
  6. Android百度ocr相机裁剪,百度OCR文字识别案例_android防止akamp;sk;泄漏版本
  7. idea调试SpringMvc, 出现:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderL
  8. 苹果阻绝电商优惠促销,消费者无望低价购买iPhone12
  9. 平台 - 各种平台汇总 - 学习/实践
  10. 甩开外包,雄踞榜首:揭开“宫爆老奶奶”成功的秘密