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,一经查实,立即删除!

相关文章

iOS中的颜色

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

多线程的基础知识

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软件复用设计文件…

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标签加入了寒假学习计划的最前方。 简介 在查…

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于是将自带的…

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…

Java 多线程 笔记 转自http://www.cnblogs.com/lwbqqyumidi/p/3804883.html

多线程作为Java中很重要的一个知识点&#xff0c; 一.线程的生命周期及五种基本状态 关于Java中线程的生命周期&#xff0c;首先看一下下面这张较为经典的图&#xff1a; 上图中基本上囊括了Java中多线程各重要知识点。掌握了上图中的各知识点&#xff0c;Java中的多线程也就基…

c/c++连接mysql数据库设置及乱码问题(vs2013连接mysql数据库,使用Mysql API操作数据库)...

我的安装环境&#xff1a; (1)vs2013(32位版) (vs2013只有32位的 没有64位的&#xff0c;但是它可以编译出64位的程序) &#xff1b; (2)mysql-5.7.15(64位) vs2013中的设置&#xff08;按步骤来&#xff0c;顺序不要乱&#xff09; (1)首先在vs2013中新建一个控制台程序 Mysq…

调用接口返回500_公交卡余额查询接口开放使用啦!

API说明本API返回数据仅支持JSON格式且会对中文进 行unicode 编码&#xff0c;JSON格式返回数据基本格式如下&#xff1a;{"errCode": 0,"errMsg": "OK","data": {}}其中 errCode 表示请求状态&#xff0c;0表示请求成功&#xff0c; …

stark组件开发之组合搜索基本显示

数据的获取&#xff0c;上一篇&#xff0c;已经有了&#xff01;然后就是&#xff0c;如何进行展示的问题。到了展示这里&#xff0c;又有了新的问题&#xff0c; 因为从数据库&#xff0c;取得的数据。 分为 queryset 和 tuple 两种数据结构。tuple 中&#xff0c;只是字符串。…

原生支付url参数错误_小程序支付

下载微信JSAPI支付的 SDK : https://pay.weixin.qq.com/wiki/doc/api/download/WxpayAPI_php.zip &#xff1b;解压后放在extend 文件夹下&#xff0c;命名为wepay下载你的商户证书&#xff0c;放在extend/wepay/cert/ 文件夹下面。自行将 extend/wepay/example/WxPay.Config.p…

枚举转中文,通过反射方法与描述的方式获取

示例&#xff1a; 有人为了显示中文&#xff0c;这样定义枚举吗&#xff1f; publicenum TimeOfDay { 上午, 下午, 晚上 }; 这样定义&#xff0c;很别扭&#xff0c;特别是在使用的时候&#xff0c; 比如&#xff0c;this.Time TimeOfDay.上午; 而…

Powershell-创建Module

1.找到默认module路径&#xff0c;ISE启动时自动加载默认领下的Module代码。 $env:PSModulePath 2.在其中一个默认路径下创建个文件夹&#xff0c;在文件夹下创建一个.psm1后缀文件&#xff0c;注意文件夹名字与文件名一样。 3.在.psm1文件中写入函数代码。 4.重启ISE自动加载m…

preserve log什么意思_一些有意思的JavaScript代码片段

Javascript是一门很灵活的语言&#xff0c;我们可以使用它动态地实现各种各样的功能。但是动态带来便利的同时&#xff0c;也存在一些令人费解的行为&#xff0c;稍不注意就会进入误区一个接着一个的坑。虽然我使用JavaScript的时间还不算长&#xff0c;也是遇到了一些有意思的…

冲刺第一天

任务板 未开始 进行中已完成 刘晓杰&#xff1a;找回密码界面 页面风格优化 刘晓杰&#xff1a;滑动欢迎界面/加载界面 预计时间&#xff1a;5.5h 冯晨&#xff1a;找回密码功能 发布动态界面 冯晨&#xff…

苹果内存取证工具volafox

2019独角兽企业重金招聘Python工程师标准>>> 苹果内存取证工具volafox volafox是一款针对苹果内存取证的专用工具。该工具使用Python语言编写。该工具内置了overlay data数据&#xff0c;用户可以直接分析苹果10.6-10.11的各种内存镜像文件。该工具提供28个子命令&a…