mysql浅拷贝_深拷贝与浅拷贝

在Python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,Python并没有拷贝这个对象,而只是拷贝了这个对象的引用。

1、浅拷贝:利用切片操作、工厂方法list方法拷贝

2、深拷贝:利用copy中的deepcopy方法进行拷贝

一、浅拷贝

如下,浅拷贝操作:

In [113]: a=['chongyi',['zhang',22]]

In [114]: b=a[:]

b通过切片操作拷贝a

In [115]: c=list(a)

c通过工厂方法拷贝a

In [116]: printid(a),id(b),id(c)50383040 49098264 50381384

由上,从a、b、c的id值来看,三者是不同的对象

1、操作1:更改a、b、c第一个元素

In [126]: a[0]="jiangxi"In [127]: b[0]="shandong"In [128]: c[0]="shanghai"In [132]: printa,b,c

['jiangxi', ['zhang', 22]] ['shandong', ['zhang', 22]] ['shanghai', ['zhang', 22]]

结果:各自更改成功,没有异常。

2、操作2:更改b第二个元素里面的第二个元素

In [137]: b[1][1]=18In [138]: printa,b,c

['jiangxi', ['zhang', 18]] ['shandong', ['zhang', 18]] ['shanghai', ['zhang', 18]]

结果:只是想改b部分,却都发生了改变

3、操作1、操作2解析

针对第一个元素,a、b、c索引不同,更改一个后,其他的不会变,但是对于第二个元素列表['zhang', 22],a、b、c通过不同的索引指向了同一个索引,所以b改完后,其他a、c也都会变。

eaa607c782e1e34934553b352da27d89.png

二、深拷贝

使用copy中的deepcopy方法进行拷贝。

In [3]: a=['jiangxi',['chongyi',123]]

In [4]: importcopy

In [5]: b=copy.deepcopy(a)

In [6]: c=copy.deepcopy(a)

In [7]: b[0]="shandong"In [8]: c[0]="shanghai"In [9]: printa,b,c

['jiangxi', ['chongyi', 123]] ['shandong', ['chongyi', 123]] ['shanghai', ['chongyi', 123]]

In [10]: b[1][0]="jinan"In [11]: printa,b,c

['jiangxi', ['chongyi', 123]] ['shandong', ['jinan', 123]] ['shanghai', ['chongyi', 123]]

由此可见:通过deepcopy的对象引用,互相不影响。

In [12]: [id(x) for x ina]

Out[12]: [46257376, 46218488]

In [13]: [id(x) for x inb]

Out[13]: [46257184, 46106600]

In [14]: [id(x) for x inc]

Out[14]: [46257472, 46248520]

4dd45c6f75f59637772d4681322dca14.png

深拷贝就是在复制某些容器对象(list)的时候,重新在内存里分配一个空间存放复制过来的索引(引用---二层索引),不是重新复制一份底层的对象的内容在内存里。

说白了,深拷贝,复制引用,且单独为其开辟一个内存空间存放。

PS:

1、容器:可以存放其他类型的内容

2、列表(list):可以存放字符串、数值、列表

三、深、浅拷贝总结

思路一:利用切片操作和工厂方法list方法拷贝是浅拷贝,只是拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。

思路二:利用copy中的deepcopy方法进行拷贝是深拷贝,外围和内部元素都进行了拷贝对象本身,而不是引用。

对于数字,字符串和其他原子类型对象等,没有被拷贝的说法(没有层次),即便是用深拷贝,查看id的话也是一样的,如果对其重新赋值,也只是新创建一个对象,替换掉旧的而已。

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

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

相关文章

盘州市“检企联合” 探索大数据应用新路

为认真贯彻落实“科技强检”及推进大数据应用的决策部署,8月31日,盘州市人民检察院组织召开以“检察大数据”为主题的“两长”座谈会。市经信局、中国移动盘州分公司、中国电信盘州分公司等单位负责人,检察院在家班子成员及院各部门主要负责人…

iOS中的颜色

最近在改Bug的时候,才注意到iOS 中的颜色竟然也大有文章,特来记录一下。 先说一下问题,因为某界面中有用xib实现的一个view,而这个view 只在UIColletionView的layout 里通过nib 注册使用,为这个xib设置了背景色&#x…

编程面试中需要了解的5件事

This article is intended for those who are trying to start their programming career, or are preparing to interview for their dream job. As someone who’s been on both sides of the interviewing table, I understand how it feels to be the interviewee.本文适用…

多线程的基础知识

1、程序、进程、线程的基本概念 程序:为了完成某种任务用某一种语言编写的一组指令的集合就叫程序。程序就是一段静态的代码。 进程:进程是程序的依次执行过程,或者说是正在运行的一个程序。这是一个动态的过程,有它自身的产生运行…

springboot实现单点登录_什么是单点登录,php是如何实现单点登录的

文章来自:php中文网链接:https://www.php.cn/php-weizijiaocheng-429869.html作者:中文网商务合作:请加微信(QQ):2230304070视频教程分享码农网:http://www.mano100.cn/rjyfk_url-url.html ,升级终身会员即…

背景图处理,这是个好东西记录一下

背景图处理 rgba (),前3个是三原色,第四个参数是透明度转载于:https://www.cnblogs.com/ChineseLiao/p/7479207.html

python使用GUI(图形用户界面)

打开后: File→New File(Ctrl N) 转载于:https://www.cnblogs.com/ly123456/p/6269859.html

Altium Designer(AD24)新工程复用设计文件图文教程及视频演示

🏡《专栏目录》 目录 1,概述2,复用方法一视频演示2.1,创建工程2.2,复用设计文件 3,复用方法二视频演示4,总结 欢迎点击浏览更多高清视频演示 1,概述 本文简述使用AD软件复用设计文件…

两点定标法_一种两点校正红外热像仪的非均匀性的模块及方法

一种两点校正红外热像仪的非均匀性的模块及方法【技术领域】[0001] 本发明属于红外热成像系统的非均匀性校正领域,特别是一种两点校正红外热像 仪的非均匀性的模块及方法。【背景技术】[0002] 在过去的几十年中,红外探测器件的元数不断增加,由…

leetcode851. 喧闹和富有(dfs)

在一组 N 个人(编号为 0, 1, 2, …, N-1)中,每个人都有不同数目的钱,以及不同程度的安静(quietness)。 为了方便起见,我们将编号为 x 的人简称为 "person x "。 如果能够肯定 perso…

如何选择正确的容器编排以及如何进行部署

by Michael Douglass迈克尔道格拉斯(Michael Douglass) 如何选择正确的容器编排以及如何进行部署 (How to choose the right container orchestration and how to deploy it) Running server processes inside containers is here to stay. If your environment is small with…

Oracle 学习笔记(三)

oracle 表查询 oracle 表基本查询 在此,基于 scott 用户存在的 emp,dept 表演示学习。 emp 雇员表 clerk 员工 salesman 销售 manager 经理 analyst 分析师 president 总裁 mgr 上级的编号 hiredate 入职时间 sal 工资 comm 奖金 deptno 部…

html meta标签使用总结(转)

之前学习前端中&#xff0c;对meta标签的了解仅仅只是这一句。 <meta charset"UTF-8"> 但是打开任意的网站&#xff0c;其head标签内都有一列的meta标签。比如我博客的。 但是自己却很不熟悉&#xff0c;于是把meta标签加入了寒假学习计划的最前方。 简介 在查…

bzoj 4009 接水果 整体二分

Description 先给出一些盘子, 用路径x-y表示, 有权值 再有Q个询问, 表示水果, 用路径x-y表示 如果盘子是水果的子路径, 可以接住 对于每个水果, 输出可以接住它的盘子的第k小权 Solution 对于x-lca-y的盘子&#xff0c;水果一定一个在x子树&#xff0c;一个在y子树 对于x-lca的…

离散元 python_刚开始学习离散元软件Yade,有什么建议?

用Yade-DEM 做过博士期间的部分工作&#xff0c;也是从毫无所知到算是入门&#xff0c;分享一点我的学习过程&#xff0c;为那些刚接触Yade的同学提供些许参考&#xff0c;希望对大家有帮助。0. Yade 简介Yade 是一个用于离散元分析的开源平台&#xff0c;是法国Lab 3SR-Grenob…

leetcode529. 扫雷游戏(dfs)

让我们一起来玩扫雷游戏&#xff01; 给定一个代表游戏板的二维字符矩阵。 ‘M’ 代表一个未挖出的地雷&#xff0c;‘E’ 代表一个未挖出的空方块&#xff0c;‘B’ 代表没有相邻&#xff08;上&#xff0c;下&#xff0c;左&#xff0c;右&#xff0c;和所有4个对角线&#…

redhat6 删除mysql_Red Hat enterprise linux 6卸载默认安装的 mysql

因为Red Hat enterprise linux 6 自带了一个mysql&#xff0c;所以当你安装新的mysql时&#xff0c;就会提示错误如&#xff1a;error&#xff1a;Failed dependencies&#xff1a;MySQL conflicts with mysql-5.1.47-4.el6.i686rmp -qa mysql 可以看到安装的mysql于是将自带的…

swift通知栏推送_如何使用Swift使用推送通知构建食品交付应用

swift通知栏推送by Neo Ighodaro由新Ighodaro 如何使用Swift使用推送通知构建食品交付应用 (How to build a food delivery app with push notifications using Swift) A basic understanding of Swift and Node.js is needed to follow this tutorial.要学习本教程&#xff0…

Jenkins持续集成实践之java项目自动化部署

关于Linux安装Jenkins可以参考我的这篇博文Ubuntu16.04环境安装jenkins 1.安装部署插件 进入插件管理&#xff0c;并搜索该插件Deploy to container Plugin进行安装 &#xff0c;下载地址为&#xff1a;https://wiki.jenkins-ci.org/display/JENKINS/DeployPlugin 2.安装完后&a…

云计算时代企业内部IT人员的新定位

本文讲的是云计算时代企业内部IT人员的新定位&#xff0c;【IT168 云计算频道】渐渐的云计算热起来&#xff0c;但是怎么去严格定义云计算&#xff0c;还是没有一个统一的说法&#xff0c;最常用的就是举例子的方式来说什么是云计算&#xff0c;最常用来打比方的是电力&#xf…