python中对列表的复制操作(浅拷贝与深拷贝)

python中对列表的复制操作用的比较广泛,之前写过一篇博客Python:复制列表,禁止函数修改列表(副本,切片表示法[:])详细讲述了python中的 [:] 操作,但是 [:] 操作仅仅只是浅拷贝,具有很大的局限性。

一:[:] 浅拷贝操作

用法(path和num都是数组):

 path = num[:] 

如 path = num[:] 中,
path只会创建num的浅层副本,即只复制num中的元素的引用,而不会复制嵌套对象本身。
什么意思呢?简单举例来说:
如果num是一维数组的话,浅拷贝与深拷贝一样,对数组path怎样操作都影响不到数组num。

path修改元素(num值不变):
在这里插入图片描述

如果num是二维或二维以上的数组的话,path只会复制num数组的表面,如果修改path中的元素,原始列表num中的对应元素也会被修改。但是,如果你对path整体进行修改(例如path.append([3,3])),则不会影响原始列表num。

path修改元素(num也会改变):
在这里插入图片描述

path增加元素(num值不变):
在这里插入图片描述

所以 [:] 浅拷贝的缺陷很明显,一旦拷贝嵌套列表(二维及二维以上),对复制的列表进行修改操作会影响原列表,无法恢复。

二:copy()浅拷贝操作:

这里主要扩充一下copy()函数的知识点,copy()函数的用法是:path = num.copy()。

path = num.copy()

path = num.copy() 与 path = num[:] 操作一样

这种方式也是对列表进行浅拷贝操作。它会创建一个新的列表path,但是该列表中的元素依然是原始列表num中元素的引用。因此,和path = num[:]一样,对path中的元素的修改会影响原始列表num中的对应元素,但对path整体的修改不会影响原始列表num。

三:标准库函数copy.deepcopy() 深拷贝(蓝桥杯可用)

用法:

import copypath = copy.deepcopy(num)

这种方式是对列表进行深拷贝操作。它会递归地复制原始列表num及其内部的所有对象,包括嵌套的列表、字典等。这样,创建的新列表path与原始列表num完全独立,对其中一个对象的修改不会影响另一个对象。深拷贝操作确保了复制后的对象与原始对象完全独立,是最安全的复制方式。

如图所示:
在这里插入图片描述

总结:

综上所述,path = num[:]和path = num.copy()是浅拷贝操作,会共享内部对象的引用,而path = copy.deepcopy(num)是深拷贝操作,会创建完全独立的副本。根据具体的需求,选择适合的复制方式来确保数据的安全性。

使用深拷贝就可以完美解决多维数组中对原数组的保留和修改问题。

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

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

相关文章

C++:深入理解operator new/operator delete

动态内存管理 1.语法层面1.基本语法注意点 2.new/delete和malloc/free的区别3.operator new和operator delete函数(底层重点)1.operator new/delete原理2.图解1.new/new[]2.delete/delete[] 3.new[n]和delete[] 4.定位new1.定义2.使用格式 1.语法层面 1…

JVM虚拟机(十)Java内存泄漏的排查思路

目录 一、可能产生内存泄露的地方二、复现堆内存泄漏三、如何排查堆内存问题?3.1 获取对内存快照 dump3.2 使用 Visual VM 去分析 dump 文件3.3 定位内存溢出问题 一、可能产生内存泄露的地方 在进行排查 Java 的内存泄漏问题之前,首先我们要知道哪里可…

Vue接收接口返回的mp3格式数据并支持在页面播放音频

一、背景简介 在实际工作中需要开发一个转音频工具,并且能够在平台页面点击播放按钮播放音频 二、相关知识介绍 2.1 JS内置对象Blob Blob对象通常用于处理大量的二进制数据,可以读取/写入/操作文件、音视频等二进制数据流。Blob表示了一段不可变的二…

AI热潮下,公链基础设施赛道都有哪些变化?

最近在一级市场,最火热的赛道无疑是AI,其次是BTC,每天聊的项目80%都集中在这两个赛道,我个人最多的时候一天可以聊5,6个AI项目。 可以预见的是AI泡沫会在明后年达到顶峰,随着数以百计的AI新项目上线&#…

【EI会议征稿通知】2024年图像处理、机器学习与模式识别国际学术会议(IPMLP 2024)

2024年图像处理、机器学习与模式识别国际学术会议(IPMLP 2024) 2024 International Conference on Image Processing, Machine Learning and Pattern Recognition 重要信息 大会官网:www.ipmlp.net(点击参会/投稿/了解会议详情)…

政安晨:【Keras机器学习示例演绎】(一)—— 利用类 U-Net 架构进行图像分割

目录 下载数据 准备输入图像的路径和目标分割掩码 一幅输入图像和相应的分割掩码是什么样子的? 准备数据集,以加载和矢量化成批数据 准备 U-Net Xception 风格模型 预留验证分割 训练模型 可视化预测 政安晨的个人主页:政安晨 欢迎 &…

京东微服务microApp使用总结

前言 基于现有业务门户进行微服务基础平台搭建 主应用框架:vue3vite 子应用框架:vue2webpack / vue3vite在这里插入代码片 本地调试即可:主应用子应用进行打通(注意:两者都是vue3vite) 问题总结 1.嵌入…

OpenHarmony多媒体-video_trimmer

简介 videotrimmer是在OpenHarmony环境下,提供视频剪辑能力的三方库。 效果展示: 安装教程 ohpm install ohos/videotrimmerOpenHarmony ohpm环境配置等更多内容,请参考 如何安装OpenHarmony ohpm包 。 使用说明 目前支持MP4格式。 视频…

(51单片机)第十一章-串行口应用提高

11.1 方式0应用 在第6章中,已经对51单片机的串行口结构做过详细介绍,并且通过实例讲解了串行口的4种工作方式中方式1的具体用法,本节详细讲述串行口方式0的用法。 串行口方式0被称为同步移位寄存器的输入/输出方式,主要用于扩展并…

Idea修改【Help->Edit Custom VM Options...】后,导致idea无法正常启动的解决方法

一、错误场景: 二、解决方法: 修改文件路径:C:\Users\tianjm(写自己的用户名)\AppData\Roaming\JetBrains\IdeaIC2024.1(选自己安装的版本)

【目标检测】Focal Loss

Focal Loss用来解决正负样本不平衡问题,并提升训练过程对困难样本的关注。 在一阶段目标检测算法中,以YOLO v3为例,计算置信度损失(图中第3、4项)时有目标的点少,无目标的点多,两者可能相差百倍…

视频质量度量VQM算法详细介绍

视频质量评价 视频质量评价(Video Quality Assessment,VQA)是指通过主观、客观的方式对视频图像的内容、画质等,进行感知、衡量与评价。 ITU definations subjective assessment: the determination of the quality or impairment of programme-like pictures presented…