[随笔重写] Python3 的深拷贝与浅拷贝

1. Python3 关于深浅拷贝的官方文档

  • 文档地址:Python3.7.2
  • 源码地址:lib/copy.py

2. 先说结论

  • 深拷贝与浅拷贝是对复合对象而言的
  • 深拷贝会构造一个新的复合对象,然后递归地将在原始对象中所有元素的副本对应地写入新复合对象中
  • 浅拷贝会构造一个新的复合对象,然后(在允许的前提下)向其中写入对原始对象的引用

3. 开始分析

  • 复合对象:包含其他对象的对象,如列表、类实例等
  • 模块、方法、堆栈跟踪、堆栈帧、文件、套接字、窗口、数组等不能被拷贝
  • 示例
# 例1import copy                         # 导入 copy 模块list1_1 = [0, 1, 2, ['a', 'b']]
list1_2 = list1_1                   # 赋值
list1_3 = list1_1.copy()            # 浅拷贝;同 list1_3 = list1_1[:]
list1_4 = copy.copy(list1_1)        # 浅拷贝
list1_5 = copy.deepcopy(list1_1)    # 深拷贝# 打印出拷贝后的 list1_1 ~ list1_5
print("list1_1 =", list1_1)
print("list1_2 =", list1_2)
print("list1_3 =", list1_3)
print("list1_4 =", list1_4)
print("list1_5 =", list1_5)
print('-'*40)                       # 分割线list1_1.append(4)                   # 在 list1_1 末尾添加一个元素 4
list1_1[3].append('c')              # 向 list1_1 中内嵌的列表末尾添加一个元素 'c'# 打印出更改后的 list1_1 ~ list1_5
print("list1_1' =", list1_1)
print("list1_2' =", list1_2)
print("list1_3' =", list1_3)
print("list1_4' =", list1_4)
print("list1_5' =", list1_5)

>>>

list1_1 = [0, 1, 2, ['a', 'b']]
list1_2 = [0, 1, 2, ['a', 'b']]
list1_3 = [0, 1, 2, ['a', 'b']]
list1_4 = [0, 1, 2, ['a', 'b']]
list1_5 = [0, 1, 2, ['a', 'b']]
----------------------------------------
list1_1' = [0, 1, 2, ['a', 'b', 'c'], 4]
list1_2' = [0, 1, 2, ['a', 'b', 'c'], 4]
list1_3' = [0, 1, 2, ['a', 'b', 'c']]
list1_4' = [0, 1, 2, ['a', 'b', 'c']]
list1_5' = [0, 1, 2, ['a', 'b']]


  • 由例1 可看出
    1. 简单的赋值只是将引用传给新对象,新旧对象除变量名外毫无区别
    2. 原对象中非第一层的可变元素发生变化时,浅拷贝的新对象中的对应元素同步变化
    3. 深拷贝的新对象是一个真正的副本,不随原对象的改变而改变
  • 补充
    1. 拷贝后的新对象占用新的空间,但其内部的元素指向原对象内部对应元素的地址
    2. 原对象中非第一层的不可变元素重新生成时,浅拷贝的新对象中的对应元素保持不变

转载于:https://www.cnblogs.com/yorkyu/p/10328162.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484265.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

珍藏版:3万字详解mRNA疫苗

来源:周观宇论撰文:邓周宇摘要新冠疫情的持续凸显了疫苗的重要性以及全球对疫苗的迫切需求。借此契机,mRNA疫苗登上了舞台,并以极高的保护率成为所有新冠疫苗种类中热度最高的C位选择。本报告介绍分析了mRNA疫苗相较于其他技术路径…

计算机网络(五)-物理层

一.物理层 1.基本概念 1.1 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。 1.2 物理层主要任务:确定与传输媒体接口有关的一些特性,即定义标准。 机械特性:定义物理连接的特性&#xff0c…

git 中文乱码配置

$ git config --global --listuser.emailibaiqi163.comuser.namezhangxui18n.commitencodingutf-8i18n.logoutputencodingutf-8core.quotepathfalsegui.encodingutf-8i18n.commit.encodingutf-8 转载于:https://www.cnblogs.com/asplover/p/10328295.html

从脑瘫患者重获交流到免开颅微创,脑机接口更安全了吗?

来源:燕良脑机接口技术作为一项前沿而又酷炫的技术,一直备受瞩目,近日,脑机接口技术取得了高价值进展,从大脑活动中解码完整句子,使得瘫痪失语者可以交流,让很多人看到了曙光。该项目是Facebook…

计算机网络(六)-传输介质

一.传输介质 1.1 传输介质也称传输媒体/传输媒介,它就是数据传输系统中在发送设备和接收设备之间的物理通路。 1.2 传输媒体并不是物理层。传输媒体在物理层的下面,因为物理层是体系结构的第一层,因此有时称传输媒体为第0层。 1.3 传输媒体…

SpringBoot项目中,Redis的初次使用

1.引入Redis依赖包&#xff0c;在application.yml中配置redis <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency> Spring:redis:host: 192.168.1.105port: …

AI不会很快取代作家——但未来可能比你想象的更近

来源&#xff1a;Forbes编译&#xff1a;科技行者能够创作内容的人工智能是一种过度炒作吗&#xff1f;还是所有的作家最终都将被机器人取代&#xff1f;企业并不一定需要更多的内容&#xff0c;但他们需要的是更好的内容。 在很多企业的简化内容营销和管理工作中&#xff0c;人…

计算机网络(七)-物理层设备

一.中继器 1.1 功能&#xff1a;对数字信号进行再生和还原&#xff0c;保持与原数据相同&#xff0c;以增加信号传输距离&#xff0c;延长网络的长度。 1.2 中继器的两端 两端的网络部分是网段&#xff0c;不是子网&#xff0c;适合完全相同的两类网络的互连&#xff0c;且两…

jquery的全选和多选操作

//全选产品 $(#checkAll).click(function() { $(this).prop(checked,!$(this).prop(checked)); if($(this).prop(checked)) { $(this).prop(checked,false); $(#getProduct input).each(function(index,item) { $(item).prop(checked,false) }) }else { $(this).prop(checked,t…

计算机网络(八)-数据链路层-帧封装

一.数据链路层 1.1 基本概念 结点:主机、路由器链路&#xff1a;网络中两个结点之间的物理通道&#xff0c;链路的传输介质主要有双绞线、光纤和微波。分为有线链路和无线链路。数据链路&#xff1a;网络中两个结点之间的逻辑通道&#xff0c;把实现控制数据传输协议的硬件和…

世界首富太空争霸:从地上斗到天上,马斯克VS贝索斯,谁能赢

来源&#xff1a;腾讯新闻棱镜作者&#xff1a;王凡编辑&#xff1a;杨布丁以2043亿美元个人资产位列全球首富的杰夫贝索斯(Jeff Bezos)也有“既生瑜、何生亮”的时刻。过去几十年,贝索斯和马斯克分别以“新物种”颠覆了传统零售和传统车企,以碾压之势席卷了整个行业。亚马逊和…

欧几里得算法及其扩展

先来看看欧几里得算法&#xff1a; 1 public class Gcd {2 /**3 * 欧几里德算法,即辗转相除法 最大公约数4 */5 public static long gcd(long m, long n) {6 return n 0 ? m : gcd(n, m % n);7 }8 9 /** 10 * 最小公倍数lowest commo…

计算机网络物理层-编码技术实现

一.编码技术 编码技术描述归零编码(RZ)信号电平在一个码元内要恢复到0状态非归零编码(NRZ)高1低0反向不归零编码(NRZI)前后信号翻转表示后面一个码元为0&#xff0c;电平不变代表1曼彻斯特编码一个码元内&#xff0c;前高后低位1&#xff0c;前低后高为0差分曼彻斯特编码码元为…

神经网络的可解释性综述

报道&#xff1a;人工智能前沿讲习 作者&#xff1a;知乎—机器学习小谈地址&#xff1a;https://zhuanlan.zhihu.com/p/368755357本文以 A Survey on Neural Network Interpretability 读后感为主&#xff0c;加上自身的补充&#xff0c;浅谈神经网络的可解释性。论文&#x…

java内存溢出总结(1.8)

堆溢出 原因&#xff1a;老年代没有足够的空间存放即将进入老年代对象&#xff08;或者没有连续的空间存下某个大对象&#xff09;&#xff0c;1.多次gc没有回收的对象 2. ygc后&#xff0c;s区满了&#xff0c;多余的对象直接进入老年代&#xff0c;3.大对象直接进入老年代解决…

大数据技术原理与应用-概述

一.大数据概述 (一)大数据概念 1.技术支撑&#xff1a;存储、计算、网络。 2.数据产生方式 第一阶段&#xff1a;运营式系统阶段第二阶段&#xff1a;用户原创内容阶段第三阶段&#xff1a;感知式系统阶段(物联网的实现普及) 3.大数据的特性(4V) 快速化(variety) 处理速度…

突破性进展!上海光机所成果登上《Nature》封面!

来源&#xff1a;中国科学院上海光学精密机械研究所中国科学院上海光学精密机械研究所强场激光物理国家重点实验室&#xff0c;利用自行研制的具有国际领先综合性能的超强超短激光装置&#xff0c;在基于激光加速器的小型化自由电子激光研究方面取得突破性进展。研究团队通过显…

爬取今日头条财经版块新闻

使用jupyter编辑, etree爬取 进入头条财经新闻网页,无法获取原网页内容,在查看各个请求中发现一个url里包含新闻信息.信息都在data里 import requests from lxml import etree import json url "https://www.toutiao.com/api/pc/feed/?categorystock&utm_sourcetout…

计算机网络(九)-物理层(补充)-傅里叶变换-信道复用

一.几个术语 1.码元------在使用时间域(时域)的波形表示数字信号时&#xff0c;代表不同离散数值的基本波形。 2.调制------把数字信号转换为模拟信号的过程。 3.解调------把模拟信号转换为数字信号的过程。 4.双绞线水晶头:从左到右分别为橙白橙(发送)、绿白蓝、蓝白绿、…

硅光芯片:突破“摩尔定律”曙光初现

来源&#xff1a;中国军网讲叙人&#xff1a;江天&#xff0c;国防科技大学前沿交叉学科学院研究员作者&#xff1a;王握文、任永存、朱晰然它是在硅基平台上将光电子和微电子融合起来的一种新技术它显示出的优异性能&#xff0c;为芯片研发“换道超车”带来希望它发展方兴未艾…