python学习之【深拷贝】

#我的编程语言学习笔记#

前言

上一篇文章python学习之【浅拷贝】 学习了python中的浅拷贝相关内容,这篇文章接着学习深拷贝。

简单回顾

浅拷贝只拷贝浅层元素,深层元素的内存地址不改变当对拷贝产生的新的对象的浅层元素进行更改时,原对象的主元素不做改变;但是对拷贝后产生的对象的深层对象进行改变时,那么原对象的深层元素的地址就会发生变化。

在这里插入图片描述

而python中的深拷贝(deepcopy) 不仅会拷贝对象的主层元素,深层元素也会拷贝。

举例

我们同样先举列表进行深拷贝的例子,注意在进行深拷贝时我们需要先引入一个 copy 模板块:

#深层拷贝需要引入一个 拷贝python copy模板块
import copy

然后利用列表来验证深拷贝:

import copya=[11,22,33,[1,2,3,[4,5]]]
d=copy.deepcopy(a)
print('--------------a的相关信息-------------')
print(a,id(a))   #[11, 22, 33, [1, 2, 3, [4, 5]]] 2196544302400
print('------------a中元素的相关信息--------------')
print(a[0],id(a[0]),a[1],id(a[1]),a[2],id(a[2]))
#11 140721422918760 22 140721422919112 33 140721422919464
a[3][1],id(a[3][1]))
# 2 140721422918472
print(a[3][3][1],id(a[3][3][1]))
# 5 140721422918568print('-------------d的相关信息--------------------')
print(d,id(d))   #[11, 22, 33, [1, 2, 3, [4, 5]]] 2196544300928
print('-------------d中元素的相关信息----------------')
print(d[0],id(d[0]),d[1],id(d[1]),d[2],id(d[2]))# 11 140721422918760 22 140721422919112 33 140721422919464

由于列表是可变序列,因此我们无法从id地址上看出内存地址的关系图;但是我们可以通过改变拷贝后得到的对象d的值来查看内存的变化情况:

print('-----------------改变深拷贝后的浅层元素和深层元素-----------------')
d[2]=100
print('改变拷贝后的对象的浅层元素后的a的相关信息:',a[2],id(a[2]))
#改变拷贝后的对象的浅层元素后的a的相关信息: 33 140721422919464d[3][1]=999
d[3][3][1]=888
print('改变拷贝后的对象d的深层元素后的a的相关信息:',a[3][1],id(a[3][1]))
# 改变拷贝后的对象d的深层元素后的a的相关信息: 2 140721422918472
print(a[3][3][1],id(a[3][3][1]))
# 5 140721422918568

通过运行结果我们可以看出:无论是改变d的浅层元素还是深层元素,原对象a的id地址都不会发生改变,这就说明,深拷贝deepcopy 会将对象的深层对象和表层对象都拷贝,形成一个新的对象。

因此它的内存图是这样的:
在这里插入图片描述

类的深拷贝

# python中的深拷贝
class CPU():pass
class Disk():pass
class Computer():def __init__(self,cpu,disk):self.cpu=cpuself.disk=disk
cpu1=CPU()
disk1=Disk()
print('cpu1的信息:',cpu1,id(cpu1))
print('disk1的信息:',disk1,id(disk1))
'''
cpu1的信息: <__main__.CPU object at 0x7f7b6e4fca90> 140168108427920
disk1的信息: <__main__.Disk object at 0x7f7b6e4fcb10> 140168108428048
'''
# 不要忘记传参
computer1=Computer(cpu1,disk1)
# 传入拷贝模板
import copy
computer3=copy.deepcopy(computer1)
print('computer1的相关信息',computer1,id(computer1),computer1.cpu,computer1.disk)
print('---------------深拷贝后的对象的信息——computer3-------------\n')
print('computer3的相关信息',computer3,id(computer3),computer3.cpu,computer3.disk)
'''
computer1的相关信息 <__main__.Computer object at 0x7f92ae4b9bd0> 140267966143440 <__main__.CPU object at 0x7f92ae4b9ad0> <__main__.Disk object at 0x7f92ae4b9b50>
computer3的相关信息 <__main__.Computer object at 0x7f92ae4b9c90> 140267966143632 <__main__.CPU object at 0x7f92ae4bd890> <__main__.Disk object at 0x7f92ae468c50>
'''

同样的,我们画出相应的内存图:
在这里插入图片描述

每篇一语

凡事预则立,不预则废!

如有不足,感谢指正!

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

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

相关文章

vue2踩坑之项目:生成二维码使用vue-print-nb打印二维码

1. vue2安装 npm install vue-print-nb --save vue3安装 npm install vue3-print-nb --save 2. //vue2 引入方式 全局 main.js import Print from vue-print-nb Vue.use(Print) ------------------------------------------------------------------------------------ //vue2 …

【亲测】mwget安装成功

微信公众号&#xff1a;leetcode_algos_life&#xff0c;代码随想随记 小红书&#xff1a;412408155 CSDN&#xff1a;https://blog.csdn.net/woai8339?typeblog 抖音【暂未开始&#xff0c;计划开始】&#xff1a;tian72530 知乎【暂未开始&#xff0c;计划开始】&#xff1a…

FLUX查询InfluxDB -- InfluxDB笔记三

1. 入门 from(bucket: "example_query") // 没有筛选条件直接查询会报错|> range(start: -1h) // |>是管道符&#xff0c;后跟筛选条件 2. 序列、表和表流 序列是InfluxDB的概念&#xff0c;一个序列是由measurement、标签集、一个字段名称 表流是FLUX为了…

Matlab信号处理1:模拟去除信号噪声

由于工作内容涉及信号系统、信号处理相关知识&#xff0c;本人本硕均为计算机相关专业&#xff0c;专业、研究方向均未涉及信号相关知识&#xff0c;因此需进行系统地学习。之前已将《信号与系统》快速过了一遍&#xff0c;但感觉较抽象且理解较浅显。在此系统地学习如何使用Ma…

leetcode的TreeNode工具类

leetcode的TreeNode工具类 场景代码demo参考地址 场景 刷题的时候&#xff0c;二叉树类型的题目&#xff0c;用里面的示例数据无法快速构建入参进行测试&#xff0c;顾封装了一个工具类。 代码demo Slf4j Data public class TreeNode {int val;TreeNode left;TreeNode right;T…

非华为机型如何体验HarmonyOS鸿蒙系统 刷写HarmonyOS鸿蒙GSI系统以及一些初步的bug修复

最近很多视频网站有非华为机型使用HarmonyOS鸿蒙系统的演示。其实大都是刷了HarmonyOS鸿蒙系统gsi系统。体验还可以。有些刷入后bug较多。那么这些机型是如何刷写gsi&#xff1f;可以参考我以往帖子 安卓玩机搞机-----没有第三方包 刷写第三方各种GSI系统 体验非官方系统_gsi刷…

JAVA反序列化漏洞复现

Weblogic&#xff08;CVE-2017-10271&#xff09; 拉取容器 访问 http://192.168.142.151:7001/console/login/LoginForm.jsp ​ 启动nacs 进行漏洞扫描 下载weblogicScanner工具 git clone https://github.com/0xn0ne/weblogicScanner.git 开始扫描 访问http://192.168.1…

50、Spring WebFlux 的 自动配置 的一些介绍,与 Spring MVC 的一些对比

Spring WebFlux Spring WebFlux 简称 WebFlux &#xff0c;是 spring5.0 新引入的一个框架。 SpringBoot 同样为 WebFlux 提供了自动配置。 Spring WebFlux 和 Spring MVC 是属于竞争关系&#xff0c;都是框架。在一个项目中两个也可以同时存在。 SpringMVC 是基于 Servlet A…

切分支解决切不走因为未合并的路径如何解决

改代码的时候改做分支了&#xff0c;本来是在另一个分支上面改代码&#xff0c;结果改到另一个放置上面&#xff0c;然后想着使用git stash进行保存&#xff0c;然后切到另外一个分支再pop&#xff0c;结果不行。 报这个错误&#xff0c;导致切不过去&#xff0c;因为我这边pop…

LDAP服务器如何重启

1、find / -name ldap 该命令只会从根路径下查看ldap文件夹 find / -name ldap2、该命令会从根路径/查看所有包含ldap路径的文件夹&#xff0c;会查询出所有&#xff0c;相当于全局查询 find / -name *ldap*2、启动OpenLADP 找到LDAP安装目录后&#xff0c;执行以下命令 #直…

游戏优化注意点

特效性能分析&#xff1a; 1、粒子数量太多&#xff0c;这个会对CPU的耗时产生一定的压力。 2、粒子的size太大&#xff0c;这样容易导致渲染的像素数量非常高。 3、Overdraw非常高&#xff0c;当场上粒子数非常高导致叠层很高&#xff0c;会造成Overdraw很高&#xff0c;这会…

RabbitMQ常见问题及其解决方案

目录 RabbitMQ如何保证顺序消费 RabbitMQ消息丢失及其解决方案 RabbitMQ如何保证顺序消费 RabbitMQ重复消费及其解决方案 RabbitMQ如何保证不重复消费 RabbitMQ消息积压及其解决方案 RabbitMQ如何实现分布式事务以及保障消息最终一致性 RabbitMQ如何保证顺序消费 在 Ra…

华为OD机试 - 英文输入法(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》…

stable diffusion实践操作-embedding(TEXTUAL INVERSION)

系列文章目录 本文专门开一节写图生图相关的内容&#xff0c;在看之前&#xff0c;可以同步关注&#xff1a; stable diffusion实践操作 文章目录 系列文章目录前言1、embeddding的功能2、如何去下载(https://civitai.com/models)2.1 筛选 TEXTUAL INVERSION2.2 筛选出来2.3 下…

数学建模--Topsis评价方法的Python实现

目录 1.算法流程简介 2.算法核心代码 3.算法效果展示 1.算法流程简介 """ TOPSIS(综合评价方法):主要是根据根据各测评对象与理想目标的接近程度进行排序. 然后在现有研究对象中进行相对优劣评价。 其基本原理就是求解计算各评价对象与最优解和最劣解的距离…

HGDB-修改分区表名称及键值

瀚高数据库 目录 环境 文档用途 详细信息 环境 系统平台&#xff1a;N/A 版本&#xff1a;4.5.7 文档用途 使用存储过程拼接SQL&#xff0c;修改分区名称、分区键值、并重新加入主表&#xff0c;适用于分区表较多场景。 详细信息 说明&#xff1a;本文档为测试过程&#xff1…

全国省市区三级地区MySQL数据(三张表)

建表语句 # 创建省信息表create table if not exists table_china_province (id int auto_increment comment 主键 primary key,province_id int(10) not null comment 省id,province_name varchar(50) default not null comment 省名称,co…

InfluxDB API -- InfluxDB笔记四

1.调试工具的安装 ApiPost (类似Postman) 2.InfluxDB v2 API 地址 官方地址: InfluxDB v2 API | InfluxDB OSS 2.7 Documentation 本地文档地址&#xff1a;host1:8086/docs 3.token认证 在web UI 的Load Data -> API Tokens里面可以复制&#xff0c;这个页面也可以创…

【N2】例题学习笔记

N2例题 《新"日本语能力测试"例题集》 听力原稿(PDF) 【10】 【問い】この筆者から見た「仕事ができる人」の特徴はどんなことか。 【提问】这位作者认为&#xff0c;仕事能力强的人具有什么特点呢&#xff1f; 【11】 文章 下の文章は、企業のあり方について…

视频集中存储/云存储/磁盘阵列EasyCVR平台分组批量绑定/取消设备功能详解

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台视频能力丰富灵活&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。视频汇聚融合管理平台EasyCVR既具备传…