Python 深浅拷贝使用与区别

news2024/11/15 8:36:39

什么是拷贝:

python 中拷贝是指创建一个新的对象,其中包含了原始对象的值,以便于在不改变原始对象的情况下进行操作。拷贝在处理数据时非常有用,特别是当我们需要对数据进行修改而又不想影响原始数据时。

2.浅拷贝

浅拷贝的规则如下: 被拷贝的对象如果是可变对象,则会生成新的对象,但仅是对可变对象外面壳子进行拷贝

不可变对象:如果被拷贝的对象是不可变对象,则不会生成新的对象。

可变对象: list set dict  

不可变对象: 数字  string tuple  

浅拷贝是指创建一个新的对象,改对象的深层内容是对原始对象中各项的引用

换句话说,浅拷贝只是复制了外面的壳子,里面的内容还是指向原来数据的内存地址。

案例: 

a = [1,2,3,[4,5,6],7,8,9] 

# 其中  1,2,3,7,8,9   就是我所说的外边的壳子   当我们使用c = a.copy() 生成的新的对象,只是复制了外面的壳子 1,2,3,7,8,9    ,其中像 [4,5,6]  和a中的[4,5,6] 指向同一个内存地址。

 总结很到位 : 菜鸟编程

 

 浅拷贝拷贝了啥? 只是外边这个 list  '[        ]',    不信你看?

python  id() 函数的作用是返回对象的内存地址   同一个id 表示同一件东西

a = [1,2,3[4,5,6]]

b = a.copy()

id(a[1],a[3])

id(b[1],a[3])

 说明了啥? 说明了浅拷贝只是创建了新的对象,就像 b 一样,相对于a来说只是创建了新的对象,其内容是原来对象的引用,,里面的东西和a 所指的是一个东西。

随着不断深入python 学习  ,对于给变量赋值: 只是存在指针一样引用的东西。

a = [1,2,3]    有个盒子  装了 [1,2,3]  我给这个盒子贴了一个标签,这个标签名是  a  a 指向了这个盒子里面的[1,2,3] , 指向连接的关系我们可以把它称为引用。

可变对象的浅拷贝

在对,原对象浅拷贝后,无论是对原来可变对象还是经过浅拷贝后的对象的外部元素修改,也就是第一层元素修改,则相互不影响,但是如果是对深层次的元素做修改则相互影响

2 深拷贝:

深拷贝是拷贝了被拷贝对象的所有元素,包括嵌套元素,深拷贝出来的对象是一个全新的对象,不会与原来的对象之间有关系。

深拷贝我们需要使用     copy 模块中  deepcopy() 函数  

改变原有对象 并不会对新复制的对象产生影响

注意: 不可变对象不能被拷贝 不论是深拷贝还是浅拷贝

                                                          深拷贝

                                                               浅拷贝

可变对象的深拷贝

有的同学说,那可变对象浅拷贝的id() 返回对象的内存地址也是不一样啊

但是我们去看看可变对象内部的元素位置是否一致,我们要知道深拷贝后可变对象,不论是内部还是整个可变对象体,它们的 内存位置都是内存给新分配的,而不是引用。

翻车了? 按照理解来经过深拷贝的对象整个对象的内存地址都会被重新分配,而测试结果却是还是引用了原来元素

# 这个有待大家去思考我也很疑惑? 

我们为什么要用 id() 查看 对象的存储位置来看可变对象不可变对象 深拷贝与浅拷贝对对象的影响,因为id() 是查看对象在内存中的位置,如果产生了一个新的对象,也就是深拷贝,内存会为该新的对象分配位置,否则不会,如果我们通过  id()  函数查看对象的位置发生了变化即使深拷贝的影响,如果没变化则是浅拷贝的影响,但是还要注意浅拷贝中,可变对象与不可变对象,可变对象即是,对象中的元素可以被修改,不可变对象及对象中的元素,不能被修改


文章引用:Python中的赋值(复制)、浅拷贝与深拷贝 - 知乎 (zhihu.com)

作者:  高桌会

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

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

相关文章

跨境安全 | 在美国做电商,千万要小心这5类信用卡欺诈手段

信用卡业务在美国早早出现并迅速完善,其支付方式的普及程度也非常高。根美国信用报告中心(American Credit Bureau)数据显示,截至2021年底,美国共有超过2.5亿信用卡用户,其中超过80%的成年人持有至少一张信…

19 行为型模式-模板方法模式

1 模板方法模式介绍 模板方法模式(template method pattern)原始定义是:在操作中定义算法的框架,将一些步骤推迟到子类中。模板方法让子类在不改变算法结构的情况下重新定义算法的某些步骤。 2 模板方法模式原理 模板方法模式的定位很清楚,…

从洋河“一带一路”之行,思考白酒国际化的破题道路

在古老的丝绸之路上,岁月不仅留下了无数行商足迹和边塞诗词,也写下了中国白酒出海最初的篇章。 作为一种文化交流的媒介,白酒曾随着陆上和海上丝绸之路来到世界各地,一度成为“世界潮品”。 千年后的今天,为了寻找新…

测试左移与右移

测试左移 对于需求,代码,质量,效率,《代码大全》很早就从软件工程实践角度说明了一个bug产生的不同阶段,修复一个bug的成本从需求阶段,设计阶段,测试阶段有着天壤差别。不仅从成本上&#xff0…

【C语言】详解数据在内存中的存储

目录 1. 整形在内存中的存储1.1 原码、反码、补码1.2 大小端介绍1.3 设计一个程序来判断当前编译器的字节序: 2. 有符号char和无符号char在内存中存储的区别2.1 有符号char(signed char/char)2.2 无符号char(unsigned char) 3. 浮点型在内存中的存储3.1 浮点数存储规…

RK356X/RK3588构建Ubuntu20.04根文件系统

文章目录 前言一、官网下载ubuntu-base二、挂载并构建文件系统2.1、配置构建文件系统环境2.2、编写挂载脚本mount.sh并安装相关工具2.3、轻量级的桌面环境 lubuntu-desktop2.4、卸载一些不必要的软件2.5、添加用户2.6 、允许root用户登录桌面2.7、串口自动登录2.8、添加分区释放…

Android期末考考前盘点(八):各类控件事件--使用内部类的更合适懵逼的考试学生方式

这个系列----Android的期末应急方案 在上学期的期末收获了一致好评,但是在上学期期末考试中发现部分考生不会,或者说考试题目中会出到一些事件,例如:Button按钮的点击事件、长按事件;EditView文本框的监听事件、ListV…

HFSS笔记——求解器和求解分析

文章目录 1、求解器2、求解类型3、自适应网格剖分4、求解频率选择4.1 求解设置项的含义4.2 扫频类型 1、求解器 自从ANSYS将HFSS收购后,其所有的求解器都集成在一起了,点击Project,会显示所有的求解器类型。 其中, HFSS design&…

Bootstrap之JavaScript的模态框(modal)使用-不离开父窗体的情况下的互动-点击按钮弹出对话框

Bootstrap的JavaScript的模态框(modal)是覆盖在父窗体上的子窗体。通常&#xff0c;目的是显示一个单独的内容&#xff0c;可以在不离开父窗体的情况下有一些互动。 子窗体可以自定义内容&#xff0c;可提供信息展示、交互等功能。 01-一个简单的、基本的模态框示例代码 <…

牛客网刷题-(4)

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

优秀采购管理7大必备流程(含模块)展示图(干货!)

企业是一个多人分工完成特定事项&#xff0c;达成特定经济目标的组织&#xff0c;必然存在分工协作&#xff0c;因此必然存在流程。企业管理如果缺乏流程规范&#xff0c;员工思想、行动都难以统一&#xff0c;事务出错率高&#xff0c;人员培养成本高&#xff0c;产品次品率高…

Qt QWebEngine 更换语言

背景 使用Qt QWebEngine开发的应用&#xff0c;在一些场景下&#xff0c;会显示英文文本&#xff0c;比如右键、JS弹出的对话框&#xff0c;所以需要进行汉化&#xff0c;更改语言。 准备翻译文件 Qt有提供翻译好的ts文件&#xff0c;我们可以直接下载ts文件qtwebengine_zh_…

创建资产报错:号码范围 71 没有在号码分配范围内

财务同事在新创建的公司下创建资产出现报错。 原因是没有给这个公司资产分配编码段。 双击报错&#xff0c;查看详细报错。 然后点击继续执行&#xff0c;会直接跳出维护资产编码的页面。从母公司中把字段编码copy一下就好了。 或者 通过事务代码&#xff0c;或者通过下面IMG…

HackTheBox - Starting Point -- Tier 0 ---Fawn

文章目录 一 题目二 实验过程 一 题目 Tags FTP、Network、Protocols、Reconnaissance、Anonymous/Guest Access译文&#xff1a;文件传输协议、网络、协议、侦察、匿名/访客访问Connect To attack the target machine, you must be on the same network.Connect to the Sta…

【知识专栏丨python数分实战】电商数据分析案例

01 电商数据来源 1.商品API&#xff1a;提供了搜索、详情、评价等与商品相关的接口&#xff0c;可以通过关键词搜索商品&#xff0c;获取商品详情、销量等信息。 2. 店铺API&#xff1a;提供了店铺信息、店铺内商品等接口&#xff0c;可以查询店铺的基本信息、主营类目、评分…

app广告变现平台怎么选?聚合广告平台的优势有哪些?

app在接广告的时候&#xff0c;开发者考虑最多的就是怕影响用户体验&#xff0c;在广告收益和流量变现之间找一个平衡&#xff0c;这个是需要一定的仔细思考的。广告多了&#xff0c;用户体验被伤害了&#xff0c;那app的留存日活都会受到影响&#xff0c;但是不上广告的话&…

反向传播法(backpropagation)的基本原理

本文通过整理李宏毅老师的机器学习教程的内容&#xff0c;介绍神经网络中用于更新参数的反向传播法&#xff08;backpropagation&#xff09;的基本原理。 反向传播 backpropagation, 李宏毅 神经网络的结构&#xff1a; loss&#xff08;损失&#xff09;的计算&#xf…

淘宝、京东双11活动全自动脚本丨IOS+安卓

淘宝的活动 - 幻想岛总动员开始了&#xff01; 又开始手忙脚乱地做任务了&#xff0c;逛逛蚂蚁森林、芭芭农场、答题、逛店铺...很多任务&#xff0c;纯手动当然很累&#xff0c;这个时候&#xff0c;我们就需要借助一些脚本软件&#xff0c;让他自动完成任务&#xff0c;薅点小…

基于android的 rk3399 同时支持多个USB摄像头

基于android的 rk3399 同时支持多个USB摄像头 一、前文二、CameraHal_Module.h三、CameraHal_Module.cpp四、编译&烧录Image五、App验证 一、前文 Android系统默认支持2个摄像头&#xff0c;一个前置摄像头&#xff0c;一个后置摄像头 需要支持数量更多的摄像头&#xff0…

博睿动态|GOPS全球运维大会2023上海站即将开启!

10月26日&#xff0c;博睿数据将应邀出席第二十一届 GOPS 全球运维大会&#xff0c;大会为期2天&#xff0c;侧重方向是 DevOps、BizDevOps、AIOps、DevSecOps、云原生、效能度量等技术领域。 博睿数据AIOps首席专家兼产品总监贺安辉受邀出席10月26日的AIOps最佳实践及解决方案…