一、赋值
Python中赋值就是对对象的简单引用,这一点与C++不同,如下:

a = [1, '123', [12, 'C']]
b = a
在上述情况下,a和b是一样的,他们指向同一片内存,b不过是a的别名,是引用.
我们可以使用b is a 去判断,返回True,说明他们地址相同,内容相同,也可以使用id()来看2个变量的地址是否相同。
赋值操作不会开辟新的内存,只是复制了对象的引用,也就是说除了b这个名字之外,没有其他的
内存开销。修改了a,也就影响了b,同理修改b也会影响a。

二、浅拷贝(shallow copy)

浅拷贝会创建新对象,其内容非原对象本身的引用,而是原对象内第一层对象的引用。
浅拷贝有三种形式:切片操作、工厂函数、copy模块中的copy函数。

比如上述的列表a;
切片操作:b = a[:]或者b = [x for x in a];
工厂函数: b = list(a);
copy函数: b = copy.copy(a);

浅拷贝产生的列表b不再是列表a了,使用is判断可以发现他们不是同一个对象,使用 id 查看,
他们也不指向同一片内存空间。但是当我们使用 id(x) for x in a 和 id(x) for x in b 来查看 a 和 b 中元
素的地址时,可以看到二者包含的元素的地址是相同的。
在这种情况下,列表 a 和 b 是不同的对象,修改列表 b 理论上不会影响到列表 a。
但是要注意的是,浅拷贝之所以称之为浅拷贝,是它仅仅只拷贝了一层,在列表 a 中有一个嵌套的
list,如果我们修改了它,情况就不一样了。
比如:a[3].append('java')。查看列表 b,会发现列表 b 也发生了变化,这是因为,我们修改了嵌
套的 list,修改外层元素,会修改它的引用,让它们指向别的位置,修改嵌套列表中的元素,列表的地
址并未发生变化,指向的都是用一个位置。

三、深拷贝(deep copy)

深拷贝只有一种形式,copy 模块中的 deepcopy()函数。
深拷贝和浅拷贝对应,深拷贝拷贝了对象的所有元素,包括多层嵌套的元素。因此,它的时间和空
间开销要高。
同样的对列表 a,如果使用 b = copy.deepcopy(a),再修改列表 b 将不会影响到列表 a,即使嵌
套的列表具有更深的层次,也不会产生任何影响,因为深拷贝拷贝出来的对象根本就是一个全新的对          象,不再与原来的对象有任何的关联。

四、拷贝的注意点?

对于非容器类型,如数字、字符,以及其他的“原子”类型,没有拷贝一说,产生的都是原对象的引用。
如果元组变量值包含原子类型对象,即使采用了深拷贝,也只能得到浅拷贝。

Python中赋值、浅拷贝、深拷贝相关推荐

  1. Python中赋值,深拷贝和浅拷贝

    1python变量 变量的存储,采用了引用语义的方式,存储的只是一个变量的值所在的内存地址,而不是这个变量的值本身. 2赋值 python变量赋值实际上是对象的引用. 如: list_a = [1,2 ...

  2. python中赋值,深拷贝,浅拷贝区别

    这三种 的区别就是 复制的变量 是否是原变量的引用. 赋值:只是原变量的引用. 浅拷贝和深拷贝的区别 需要通过 子元素 区分 浅拷贝:子元素的 引用相同 深拷贝:所以引用都不相同,完全复制一份 这三种 ...

  3. Interview:算法岗位面试—10.11下午—上海某公司算法岗位(偏机器学习,互联网数字行业)技术面试考点之XGBoost的特点、python的可变不可变的数据类型、赋值浅拷贝深拷贝区别

    ML岗位面试:10.11下午-上海某公司算法岗位(偏机器学习,互联网数字行业)技术面试考点之XGBoost的特点.python的可变不可变的数据类型.赋值浅拷贝深拷贝区别 Interview:算法岗位 ...

  4. python中有那几种赋值_详解Python列表赋值复制深拷贝及5种浅拷贝

    概述 在列表复制这个问题,看似简单的复制却有着许多的学问,尤其是对新手来说,理所当然的事情却并不如意,比如列表的赋值.复制.浅拷贝.深拷贝等绕口的名词到底有什么区别和作用呢? 列表赋值 # 定义一个新 ...

  5. Python中的浅拷贝和深拷贝(一看就懂!!!)

    浅拷贝和深拷贝一直傻傻的分不清,甚至有时候会理解反.今天就简单总结一下python中的浅拷贝和深拷贝. 总结 最直观的理解就是: 1.深拷贝,拷贝的程度深,自己新开辟了一块内存,将被拷贝内容全部拷贝过 ...

  6. python中赋值不正确的_python中关于赋值、浅拷贝与深拷贝的问题

    Python中关于对象复制有三种类型的使用方式,赋值.浅拷贝与深拷贝.他们既有区别又有联系,刚好最近碰到这一类的问题,研究下. 一.赋值 在python中,对象的赋值就是简单的对象引用,这点和C++不 ...

  7. 一文搞懂JS中的赋值·浅拷贝·深拷贝

    前言 为什么写拷贝这篇文章?同事有一天提到了拷贝,他说赋值就是一种浅拷贝方式,另一个同事说赋值和浅拷贝并不相同.我也有些疑惑,于是我去MDN搜一下拷贝相关内容,发现并没有关于拷贝的实质概念,没有办法只 ...

  8. python3 赋值 浅拷贝 深拷贝 简介

    目录 一.赋值 二.浅拷贝(shallow copy) 三.深拷贝(deep copy) 四.关于拷贝操作的警告 一.赋值 在python中,对象的赋值就是简单的对象引用,这点和C++不同.如下: a ...

  9. python中赋值不正确的_python中的“赋值与深浅拷贝”

    Python中,赋值与拷贝(深/浅拷贝)之间是有差异的,这主要源于数据在内存中的存放问题,本文将对此加以探讨. 1 赋值(添加名字) 赋值不会改变内存中数据存放状态,比如在内存中存在一个名为data的 ...

最新文章

  1. Linux命令(持续更新)
  2. ubuntu环境下一键切换python的virtualenv虚拟环境
  3. #js#简单的在线计算器
  4. java创建android快捷方式_Android 通过应用程序创建快捷方式
  5. 算数运算符与关系运算符_Swift进阶三——运算符相关
  6. 简书和微博的区别是什么
  7. redis各种数据结构在项目中的应用场景
  8. 漫画:如何实现大整数相乘?
  9. 黑盒测试用例设计方法实践---(判定表驱动法)
  10. QR 二维码纠错码(三)
  11. 出现问题请与你的系统管理员联系 照片出现问题请与你的系统管理员 照片出现问题请与系统管理员联系 无法打开应用请与管理员联系
  12. 亿阳信通java开发,北京亿阳信通笔试题java+oracle
  13. 华硕重装后进入bios_华硕台式机重装系统win10按哪个键进入bios设置
  14. 极具发展潜力的20项油气勘探开发新技术
  15. OneNET麒麟座应用开发之八:采集大气压力等环境参数
  16. 2020大疆校招嵌入式B卷编程题
  17. Facebok的动画框架pop
  18. SQL注入原理及绕过技术
  19. 报道 | 香港科技大学三十周年校庆红鸟之夜庆祝晚宴圆满落幕
  20. “飞象”已露国家级工业互联网平台之像

热门文章

  1. 005_Buzz播放音频
  2. javascript乘法和加法_JS加减乘除运算
  3. java中文getbytes为3,java 中文乱码问题
  4. python 作用域 前缀_Python 之作用域和名字空间
  5. Java高并发编程:HandlerThread
  6. 巧妙的 排序+去重——C语言
  7. linux fsck exited with status code 4,linux – 在硬盘崩溃后启动PostgreSQL服务器导致FAILED STATE...
  8. 项目启动 ora-00942:_如何解决大型软件项目开发难题?唯快不破!
  9. 电商扣减库存_以电商为例 | B端产品经理,怎么做好库存系统设计
  10. 如何对比_潭酒红潭酱酒对比红花郎怎么样口感如何