4. Python的深拷贝、浅拷贝

news2024/11/29 12:35:17

文章目录

      • 0、先说结论
      • 1、浅拷贝修改元素值
      • 2、深拷贝修改元素值
      • 学习链接

0、先说结论

无论深拷贝还是浅拷贝都会为新对象分配一块新的内存,因此新老对象id不相同。
对于浅拷贝,新老对象内部的可变and不可变元素id都是相同的(在没修改元素值之前)。
对于深拷贝,新老对象内部的可变元素id不相同、不可变元素id相同(在没修改元素值之前)。

1、浅拷贝修改元素值

★重点★:浅拷贝下修改了a对象内元素的值,b对象内元素的值是否发生变化,取决于被修改的值是否是可变对象。

【情况一】:如果修改的元素是可变对象,那么修改了a内元素,b内元素会发生变化,该元素在a、b内的id仍然相同;
【情况二】:如果修改的元素是不可变对象,那么修改了a内元素,b内元素不会发生变化,该元素在a、b内的id将不再相同(由相同变为不相同)。

import copy
a = [1, 2, [3, 4]]       
b = copy.copy(a)    # 浅拷贝

# 新老对象id不相同
print(id(a))        # 输出结果:140616167615944
print(id(b))        # 输出结果:140616167644104

# 可变对象id相同
print(id(a[2]))     # 输出结果:140615967617352
print(id(b[2]))     # 输出结果:140615967617352

# 不可变对象id相同
print(id(a[1]))     # 输出结果:140651006928832
print(id(b[1]))     # 输出结果:140651006928832

# 情况1举例:修改的元素是可变对象
a[2][1] = 5          # 修改a中[3, 4]元素,将4修改为5
print(a)             # 打印结果:[1, 2, [3, 5]]
print(b)             # 打印结果:[1, 2, [3, 5]]
# 可变对象id依然相同
print(id(a[2]))      # 打印结果:140615967617352
print(id(b[2]))      # 打印结果:140615967617352

# 情况2举例:修改的元素是不可变对象
a[1] = 4              # 修改a中第1个位置上的元素,即将2修改为4
print(a)              # 打印结果:[1, 4, [3, 5]]
print(b)              # 打印结果:[1, 2, [3, 5]]
# 不可变对象id不相同
print(id(a[1]))       # 打印结果:140467457144832
print(id(b[1]))       # 打印结果:140467457144768

对象引用示例

2、深拷贝修改元素值

★重点★:深拷贝下修改了a对象内元素的值,b对象内元素的值是否发生变化,取决于被修改的值是否是可变对象。

【情况一】:如果修改的元素是可变对象,那么修改了a内元素,b内元素不会发生变化,该元素在a、b内的id仍然不相同;
【情况二】:如果修改的元素是不可变对象,那么修改了a内元素,b内元素不会发生变化,该元素在a、b内的id将不再相同(由相同变为不相同)。

import copy
a = [1, 2, [3, 4]]
b = copy.deepcopy(a)    # 深拷贝

# 新老对象id不相同
print(id(a))            # 输出结果:139687452818888
print(id(b))            # 输出结果:139687452847048

# 可变对象id不相同
print(id(a[2]))         # 输出结果:139687252566408
print(id(b[2]))         # 输出结果:139687252566152

# 不可变对象id相同
print(id(a[1]))     # 输出结果:140442278533056
print(id(b[1]))     # 输出结果:140442278533056

# 情况1举例:修改的元素是可变对象
a[2][0] = 4          # 修改a中[3, 4]元素,将3修改为4
print(a)             # 打印结果:[1, 2, [4, 4]]
print(b)             # 打印结果:[1, 2, [3, 4]]
# 可变对象id不相同
print(id(a[2]))      # 打印结果:139687252566408
print(id(b[2]))      # 打印结果:139687252566152

# 情况2举例:修改的元素是不可变对象
a[1] = 4              # 修改a中第1个位置上的元素,即将2修改为4
print(a)              # 打印结果:[1, 4, [4, 4]]
print(b)              # 打印结果:[1, 2, [3, 4]]
# 不可变对象id不相同
print(id(a[1]))       # 打印结果:140467457144832
print(id(b[1]))       # 打印结果:140442278533056

对象引用示例

学习链接

https://blog.csdn.net/weixin_44244190/article/details/129249875

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

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

相关文章

【限时免费,手慢无】Unity 怪物资源包,MONSTER 动作超丰富,不领后悔!

Unity 怪物资源包,MONSTER 动作超丰富 前言资源包内容领取兑换码 前言 👾 突破想象!惊艳众人的怪物模型登场 👾 今天要向大家介绍一款令人瞩目的游戏怪物模型!这个看似丑陋的小怪物,却有着巨大的潜力&…

JavaWeb之过滤器(Filter)与监听器(Listener)

前言 过滤器(Filter) 1.什么是过滤器 2.过滤器的语法格式 3.使用场景 3.1.如何防止用户未登录就执行后续操作 3.2.设置编码方式--统一设置编码 3.3.加密解密(密码的加密和解密) 3.4.非法文字筛选 3.5.下载资源的限制 监听器(Listener) 1.什么是监听器 2.监听器分类…

目标检测——色素性皮肤病变数据集

引言 亲爱的读者们,您是否在寻找某个特定的数据集,用于研究或项目实践?欢迎您在评论区留言,或者通过公众号私信告诉我,您想要的数据集的类型主题。小编会竭尽全力为您寻找,并在找到后第一时间与您分享。 …

如何理解VMware中的网络模式(NAT、桥接、仅主机)

目录 Ⅰ.NAT模式 Ⅱ.仅主机模式 Ⅲ.桥接模式 Ⅰ.NAT模式 NAT模式:将物理机的网卡作为虚拟交换机的上线链路,将vmware的私有网络转成可以上网的地址进行网络访问,因此在NAT模式下虚拟机是可以访问外部网络的(图一) …

电路板维修【一】

最近喜欢上了电路板维修,经常看很多博主的维修视频,觉得还是颇有收获的(维修板子原来有方法可循),于是做笔记如下: 一.【修了半天也没找到问题,原来是检查方向错了,变频油烟机板维修…

基于SSM的“医院院内物资管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SSM的“医院院内物资管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 功能模块图 系统登录页面 用户管理功能模块 模板列表管…

CSS---复合选择器、元素显示模式和背景(三)

一、CSS的复合选择器 1.1 什么是复合选择器 在CSS中,可以根据选择器的类型把选择器分为基础选择器和复合选择器,复合选择器是建立在基础选择器之上,对基本选择器进行组合形成的。 复合选择器是由两个或多个基础选择器连写组成,它…

监控异地组网怎么组网?

监控异地组网是指在不同地域的网络环境下,实现对监控设备的远程访问和管理。在传统的网络环境下,由于网络限制和设备配置等问题,监控设备的远程访问往往受到一定的限制和困扰。为了解决这个问题,引入了天联组网技术,实…

LLM大语言模型(十五):LangChain的Agent中使用自定义的ChatGLM,且底层调用的是remote的ChatGLM3-6B的HTTP服务

背景 本文搭建了一个完整的LangChain的Agent,调用本地启动的ChatGLM3-6B的HTTP server。 为后续的RAG做好了准备。 增加服务端role:observation ChatGLM3的官方demo:openai_api_demo目录 api_server.py文件 class ChatMessage(BaseModel…

英语学习笔记9——How are you today?

How are you today? 你好吗? 词汇 Vocabulary well adj. 好的 n. 井 fine adj. 美好的 两个方面:天气、身体。 搭配:a fine day 晴朗的一天    It’s a fine day today. 今天很晴朗。 good adj. 好的 口语偏多 搭配:Good jo…

【Python技术】使用akshare、pandas高效复盘每日涨停板行业分析

作为一个程序员宝爸,每天的时间很宝贵,工作之余除了辅导孩子作业,就是补充睡眠。 怎么快速高效的进行当天A股涨停板的复盘,便于第二天的跟踪。这里简单写个示例, 获取当天连涨数排序,以及所属行业排序。 …

服务器数据恢复—RAID5磁盘阵列两块盘离线的数据恢复过程

服务器故障: 服务器中有一组由多块硬盘组建的raid5磁盘阵列,服务器阵列中2块硬盘先后掉线导致服务器崩溃。 服务器数据恢复过程: 1、将故障服务器中所有磁盘编号后取出,由硬件工程师对掉线的两块磁盘进行物理故障检测&#xff0c…

AGI 时代,Rust与Python谁是未来的语言?

随着 Rust 在开发者社区中越来越受欢迎,有必要问一下,Rust 会取代 Python 吗?哪一款最适合您?而且,你应该开始学习 Rust 吗?本文将对 Rust 与 Python 进行全面比较。读完本文后,你将对是否要开始…

uniapp:抖音PK进度条(nvue)

nvue中,仿抖音PK进度条效果, <template><view class="index" :style="{width:windowWidth+px,height:index_windowHeight+px,paddingTop:windowTop+px}"><view class="pk"><text class="pk_jindu_left_val fsz-24 …

基于SSM框架弹幕视频网站

采用技术 基于SSM框架弹幕视频网站的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringMVCMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 前台首页 首页 登录 视频信息 商品信息 个人信息 用户模块 我…

ntfs文件系统的优势 NTFS文件系统的特性有哪些 ntfs和fat32有什么区别 苹果电脑怎么管理硬盘

对于数码科技宅在新购得磁盘之后&#xff0c;出于某种原因会在新的磁盘安装操作系统。在安装操作系统时&#xff0c;首先要对磁盘进行分区和格式化&#xff0c;而在此过程中&#xff0c;操作者们需要选择文件系统。文件系统也决定了之后操作的流程程度&#xff0c;一般文件系统…

图像处理的一些操作(3)

图像处理 13.创建主窗口与子图13.1导入模块 加载图片13.2创建窗口13.3创建子图数组 14.定义png图像文件路径15.提取指定帧图像16.图像旋转17.伽马值校正18.检查图像对比度19.强度缩放20 . 绘制直方图20.三通道彩色直方图21.算子21.1Sobel22.2 prewitt 22.滤波器23.绘制图形23.1…

python实现背单词程序

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.代码 三.使用 四.分析 一.前言 背单词是学习英语的一个重要环节,它有很多好处,以下是其中一些主要的好处: 提高词汇量

数据结构之单链表的基本操作

目录 一.定义一个单链表 二.实现基本操作 1&#xff09;链表的打印 2&#xff09;链表的尾插 3&#xff09;链表的头插 4&#xff09;链表的尾删 5&#xff09;链表的头删 6&#xff09; 链表的查找 7&#xff09;在指定位置之前插入数据 8&#xff09;在指定位置之…

内网安全综合管理系统是什么 | 好用的内网安全管理系统有哪些

内网安全综合管理系统是指一种集成终端管理、网络管理、内容管理、资产管理等功能的综合性安全管理系统。它主要对内网上的主机进行统一安全管理&#xff0c;包括对网络主机用户操作实施监督控制&#xff0c;并对主机中的安全软件&#xff08;如主机入侵监测系统、主机防火墙和…