对于不可变对象,创建副本没有多大意义,因为它们不会改变。对于可变对象^{},^{}和^{}的行为不同。让我们用例子来讨论它们。

赋值操作只是将源的引用赋值给目标,例如:>>> i = [1,2,3]

>>> j=i

>>> hex(id(i)), hex(id(j))

>>> ('0x10296f908', '0x10296f908') #Both addresses are identical

现在i和j在技术上指的是同一个列表。i和j都有相同的内存地址。任何更新

它们中的一个会反射到另一个。e、 克:>>> i.append(4)

>>> j

>>> [1,2,3,4] #Destination is updated

>>> j.append(5)

>>> i

>>> [1,2,3,4,5] #Source is updated

另一方面,copy和deepcopy创建变量的新副本。所以现在对原始变量的更改将不会反映出来

复制变量,反之亦然。但是copy(shallow copy),不要创建嵌套对象的副本,而只是

复制嵌套对象的引用。Deepcopy递归地复制所有嵌套对象。

演示copy和deepcopy行为的一些示例:

使用copy:的平面列表示例>>> import copy

>>> i = [1,2,3]

>>> j = copy.copy(i)

>>> hex(id(i)), hex(id(j))

>>> ('0x102b9b7c8', '0x102971cc8') #Both addresses are different

>>> i.append(4)

>>> j

>>> [1,2,3] #Updation of original list didn't affected copied variable

使用copy:的嵌套列表示例>>> import copy

>>> i = [1,2,3,[4,5]]

>>> j = copy.copy(i)

>>> hex(id(i)), hex(id(j))

>>> ('0x102b9b7c8', '0x102971cc8') #Both addresses are still different

>>> hex(id(i[3])), hex(id(j[3]))

>>> ('0x10296f908', '0x10296f908') #Nested lists have same address

>>> i[3].append(6)

>>> j

>>> [1,2,3,[4,5,6]] #Updation of original nested list updated the copy as well

使用deepcopy:的平面列表示例>>> import copy

>>> i = [1,2,3]

>>> j = copy.deepcopy(i)

>>> hex(id(i)), hex(id(j))

>>> ('0x102b9b7c8', '0x102971cc8') #Both addresses are different

>>> i.append(4)

>>> j

>>> [1,2,3] #Updation of original list didn't affected copied variable

使用deepcopy:的嵌套列表示例>>> import copy

>>> i = [1,2,3,[4,5]]

>>> j = copy.deepcopy(i)

>>> hex(id(i)), hex(id(j))

>>> ('0x102b9b7c8', '0x102971cc8') #Both addresses are still different

>>> hex(id(i[3])), hex(id(j[3]))

>>> ('0x10296f908', '0x102b9b7c8') #Nested lists have different addresses

>>> i[3].append(6)

>>> j

>>> [1,2,3,[4,5]] #Updation of original nested list didn't affected the copied variable

python赋值浅拷贝和深拷贝的区别_浅拷贝、深拷贝和普通赋值操作有什么区别?...相关推荐

  1. js深拷贝和浅拷贝对数组的影响_浅拷贝与深拷贝(JavaScript)

    一.预备知识 ECMAScript变量包含两种不同数据类型的值:基本数据类型和引用数据类型. 基本数据类型:名值存储在栈内存中: 引用数据类型:名存在栈内存中,值存在于堆内存中,但是栈内存会提供一个引 ...

  2. python有参函数和无参函数的区别_构造函数的有参和无参的区别,构造函数的参数是派什么用场的?...

    展开全部 区别: 1.如果在创建对象时不写参数,调用的就32313133353236313431303231363533e58685e5aeb931333366303861是无参的构造方法.可是如果你 ...

  3. python换行和回车的区别_终于搞懂了回车与换行的区别

    关于换行和回车其实平时我们不太在意,所以关于两者的区别也不太清楚,在平时开发时可能会遇到一些文件处理的问题,放到不同的操作系统上出现各种坑.那么回车和换行到底有哪些区别呢?今天咱们就来总结一下. 1. ...

  4. 简述直方图和柱形图的区别_什么是直方图?跟柱状图有什么区别?终于有人讲明白了...

    导读:直方图和柱状图都是数据分析中非常常见.常用的图表,由于两者外观上看起来非常相似,也就难免造成一些混淆.此前我们曾在<柱状图.堆叠柱状图.瀑布图有什么区别?怎样用Python绘制?>一 ...

  5. java与ios的区别_好奇?Android与iOS究竟有什么区别?终于知道了!

    智能手机系统的发展从如今的百花齐放在到三足立鼎,而发展到了现在则是安卓与ios两家平分天下.谁的系统好用?到底是IOS好呢,还是安卓系统好呢?至今没有一个结果.那么Android与iOS到底有什么区别 ...

  6. java js 正则区别_对比正则表达式在JavaScript与Java中的区别

    这篇文章主要介绍了JavaScript与Java正则表达式写法的区别介绍,需要的朋友可以参考下 Js验证写法:(转义符\) var str = "待验证文本"; var regul ...

  7. python n个list如何组成矩阵_通过学习在processing中操作图片,掌握python 列表操作...

    这次的教学非常简单,只需要安装了python模式的processing就可以(安装教程见专栏目录).我从网上找了一个比100*100稍微大一点的图片,你可以也找一个.然后我们就可以一起开始今天的学习啦 ...

  8. jmeter进程和线程的区别_一文搞懂进程和线程的区别

    计算机系统是由硬件和软件组成的,它们共同协作以运行应用程序.先来看下面这张一个典型的计算机系统的硬件组成图 从上图中看出一个系统由 CPU.ALU(算术逻辑单元).PC(程序计数器).总线(贯穿整个系 ...

  9. 周期均方根和有效值的区别_买羊肉,“羔羊肉”和“羊肉”有啥区别?口感差别大,别再乱买了...

    羊肉营养滋补,暖胃驱寒,秋冬季正是吃羊肉最合适的时候,往往这个时候会有很多爱吃羊肉的朋友选购羊肉,而羊肉虽然好吃,但也有许多人分不清楚羔羊肉和羊肉的区别,目前市面上最常售卖的就是这2种羊肉,而二者价格 ...

最新文章

  1. 最近做了一个小小的系统,收获挺大的....我想总结一下
  2. 删除SQL数据库中事务日志方法
  3. (札记)Altera Stratix IV系列FPGA TRUE LVDS RX input termination 在Quartus工程中的设置方法...
  4. [EasyTao(道)系列文章之一]太极之道
  5. vue These dependencies were not found: * core-js/modules/es.array.iterator in ./node_modules/@babe
  6. Python八种数据导入方法,你掌握了吗?
  7. 聊聊Service(一)
  8. 剑指offer-面试题13.在O(1)时间删除链表节点
  9. 李洪强iOS开发之FMDB线程安全的用法
  10. 提高篇 第五部分 动态规划 第5章 单调队列优化动态规划
  11. down perm什么意思_没想到“羽绒服”竟叫down coat!为啥有个down?
  12. 8.15 SNAIL:神经注意力元学习
  13. css 背景色半透明 子元素不透明
  14. 3月2日 PCA的应用示例
  15. html音乐播放器代码大全,关于HTML 音乐播放器代码|音乐播放器网页代码大全(转)...
  16. java 仿百度文库源码_Java模拟实现百度文档在线浏览
  17. 达观RPA自动订单处理机器人, 助力制造业订单处理效率提升
  18. 【四二学堂】基于uni-app开发的跨平台井字游戏(App+H5 web+微信小程序)
  19. u盘有声音但是不显示怎么办?u盘不显示解决方案
  20. js-页面需展示大量图片时,采用lyz.delayLoading.min.js,图片在屏幕时加载显示

热门文章

  1. 函数式编程 -- 函数是一等公民、高阶函数、闭包
  2. 【编程】不同编程语言的用处(图解)
  3. C#LeetCode刷题之#387-字符串中的第一个唯一字符(First Unique Character in a String)
  4. checksec未完待续~
  5. nodejs 实践项目_NodeJS:最佳生产实践
  6. 手动创建线程更好哦_如何通过创建更好的工作流程找到下一个大想法
  7. javascript入门_您需要一个JavaScript入门工具包
  8. LeetCode-234. 回文链表(C语言)
  9. 【寻子】人脸识别与寻子的碰撞
  10. 水泊梁山迎佳节,Python 抽奖助好汉