python的深浅拷贝

在Python中,深拷贝(deep copy)和浅拷贝(shallow copy)是用于复制对象的两种方式。

先通俗地解释一下深拷贝和浅拷贝。

想象一下你有一个盒子(原始对象),里面装着几本书(数据)。现在你想要复制这个盒子,得到一个全新的一样的盒子(新对象)。这时候就涉及到了深拷贝和浅拷贝的概念。

浅拷贝就像是将原来的盒子完全复制一份。新盒子里放着跟原来盒子相同的书。但是如果其中有些书是其他人也有的,那么两个盒子里放的其实是同样的书。这意味着,如果你在新盒子中加入或移除书籍,那么原来的盒子也会被影响到。因为他们共享同样的引用关系。

而深拷贝则更彻底。它不仅会复制整个盒子,还会将每本书都重新复制一份放进去。这样两个盒子之间没有任何关联,修改其中一个不会对另一个产生影响。

所以说,浅拷贝只复制了外层对象(引用或指针),而深拷贝则逐层地将所有嵌套对象都进行复制。

所以,浅拷贝会创建一个新的对象,并将原始对象的引用复制到新对象中。这意味着修改新对象可能会影响原始对象。而深拷贝则会创建一个全新的独立对象,并且递归地将原始对象及其所有嵌套对象完整复制到新对象中,因此对新对象的任何修改不会影响原始对象。

使用场景:

  1. 浅拷贝适用于需要复制简单数据类型或者只需一层复制的情况。它可以节省内存并提高性能。
  2. 深拷贝适用于需要独立副本,且涉及嵌套或可变数据结构的情况。它确保在修改副本时不会影响到原始数据。

简单示例:

# 浅拷贝示例
import copylist1 = [1, 2, [3, 4]]
list2 = list1.copy()  # 或者 list2 = copy.copy(list1)
list2[0] = 5
list2[2].append(6)print(list1)  # [1, 2, [3, 4, 6]]
print(list2)  # [5, 2, [3, 4, 6]]# 深拷贝示例
import copylist1 = [1, 2, [3, 4]]
list2 = copy.deepcopy(list1)
list2[0] = 5
list2[2].append(6)print(list1)  # [1, 2, [3, 4]]
print(list2)  # [5, 2, [3, 4, 6]]

在浅拷贝示例中,修改了列表 list2 的第一个元素和第三个元素的子列表。这导致原始列表 list1 被影响。

而在深拷贝示例中,即使对副本进行了修改,原始列表保持不变。

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

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

相关文章

DevOps落地笔记-03|用户故事:对用户需求达成共识的关键

上一讲主要跟你介绍了如何使用影响地图这个工具来进行产品定义、里程碑规划和用户需求分析。影响地图让我们始终以达到目标为核心,并让功能和需求不偏离该目标,从而让交付更有重点。可视化、结构化的思维导图为技术和业务人员创建了共享的整体视图&#…

769933-15-5,Biotin aniline,可以合成多种有机化合物和聚合物

您好,欢迎来到新研之家 文章关键词:769933-15-5,Biotin aniline,生物素苯胺,生物素-苯胺 一、基本信息 产品简介:Biotin Aniline,一种具有重要生物学功能的化合物,不仅参与了维生…

Docker多节点部署Minio分布式文件系统并测试

文章目录 一、前提准备二、文件配置1. .env2. env/minio.env3. docker-compose-minio.yml 三、测试四、Java测试1. 引入依赖2. 增删改 一、前提准备 准备如下文件夹和文件 ./ ├── docker-compose-minio.yml ├── .env ├── env │ ├── minio.env ├── minio │…

基于Qt 视频播放器mp4/wav/avi/等等(进阶)

​## Qt音视频相关 Qt 多媒体音频模拟按钮发音(音视频启动)基于Qt 音乐播放器mp3(进阶)## 项目工具 工具名

场效应管学习笔记

目录 一、场效应管的基本原理 二、场效应管的特性 三、场效应管的应用 四、学习总结 一、场效应管的基本原理 场效应管(Field-Effect Transistor,简称 FET)是一种利用电场效应控制电流的半导体器件。与双极型晶体管不同,场效应…

C#网络爬虫之TianyaCrawler实战经验分享

互联网时代的到来带来了大量的数据,而网络爬虫技术成为了获取这些数据的重要途径之一。如果你是一名C#开发者,那么你可能会对TianyaCrawler这个强大的网络爬虫框架感兴趣。本文将带你深入了解TianyaCrawler,分享它的技术概况、使用场景&#…

显示企业信息的SSL证书

随着互联网的发展,以及《网络安全法》、《数据安全法》、《个人信息保护法》等法律法规的出台,越来越多的企业意识到保护用户信息的重要性,尤其是对于涉及商业交易和个人数据的网站。为了保护网站安全和用户隐私,给网站部署SSL证书…

索引创建原则

创建索引是一个优化数据库查询性能的关键步骤。正确的索引可以大幅提高查询效率,减少数据的检索时间。但是,不恰当的索引会增加额外的维护成本,并可能降低某些数据库操作的效率。以下是一些创建索引时应遵循的原则: 索引创建原则…

02-opencv简单实例效果和基本介绍-上

机器视觉概述 机器视觉是人工智能正在快速发展的一个分支。简单说来,机器视觉就是用机器代替人眼来做测量和判断。机器视觉系统是通过机器视觉产品(即图像摄取装置,分CMOS和CCD两种)将被摄取目标转换成图像信号,传送给专用的图像处理系统,得到被摄目标的形态信息,根据像素…

从零开始复现GPT2(四):训练代码的实现

源码地址:https://gitee.com/guojialiang2023/gpt2 GPT2 模型Configuration类定义 Recorder训练框架Trainer训练代码GPT2TrainingSpec 类train_gpt2_model 函数add_subparser 函数 模型 Configuration 这段代码定义了一个名为 TrainConfig 的 Python 类&#xff0c…

异步解耦之RabbitMQ(一)

引言 什么是MQ?为什么要用MQ? MQ是消息队列(Message Queue)的简称。消息队列是一种在应用系统之间传递消息的方法,它实现了异步通信的机制,解耦了不同组件或系统之间的直接依赖关系。通过将消息发送到消息…

【Java程序设计】【C00205】基于(JavaWeb+SSM)的商场停车服务管理系统(论文+PPT)

基于(JavaWebSSM)的商场停车服务管理系统(论文PPT) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的商场停车服务管理系统 本系统分为管理员和用户2个功能模块。 管理员:管理员进入主页面&…

Codeforces Round 922 (Div. 2)补题

Brick Wall(Problem - A - Codeforces) 题目大意:规定砖的大小为1*k(k>2),现在有一面n*m的砖墙,n是墙高,m是墙宽,砖在砖墙中有两种放法,水平放置和竖直放置&#xff…

Django_基本增删改查

一、前提概述 通过项目驱动来学习,以图书管理系统为例,编写接口来实现对图书信息的查询,图书的添加,图书的修改,图书的删除等功能。(不包含多重信息的校验,只为了熟悉增删改查接口的实现流程&a…

Flink 读取 Kafka 消息写入 Hudi 表无报错但没有写入任何记录的解决方法

博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,京东购书链接:https://item.jd.com/12677623.html,扫描左侧二维…

前端封装websocket类,实现消息注册和全局回调

实现消息注册和回调函数,实现全局使用同一个webscoket对象,并实现断线重连和心跳连接等功能,可以实现全局使用唯一实例,可以另外进行拓展配置 // WebSocket类对象 class WebSocketCli {// 构造函数constructor(url: string, opts…

北斗编码实现

本文根据北斗格网编码标注编写的测试代码, 北斗国标描述网址 http://c.gb688.cn/bzgk/gb/showGb?typeonline&hcno77B7EA113926D3247F9688324D4A91C8 我将北斗编码整理成一张图, 如下(代码在文末附上): #include "stdafx.h" #include <vector> #include &…

猫头虎博主第10期赠书活动:《写给大家看的Midjourney设计书》

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通Golang》…

Android 9.0 SystemServer进程读写sdcard权限的修改

1.前言 在9.0的系统rom定制化开发中,在一些系统进程中,也就是在SystemServer的进程中,其中系统服务中会要求读写Sdcard的一些功能,然后 默认是没有读取sdcard权限的,而在app中可以申请sdcard读写权限在系统服务中就不能申请权限,接下来看怎么授权实现sdcard授权 如图: 2…

OpenSIPS3.4 cachedb_sql模块测试

先上路由脚本&#xff1a; #debug_modeyeslog_level3 xlog_level3 stderror_enabledno syslog_enabledyes syslog_facilityLOG_LOCAL0udp_workers4socketudp:127.0.0.1:5060 # CUSTOMIZE ME sockettcp:127.0.0.1:5060 # CUSTOMIZE ME#set module path mpath"/usr/lib…