别名、浅复制与深复制
别名
别名就是起另一个名字,实际上是同一个东西,地址完全一样,改变任意一个的值,另一个会随着改变。
person_info = ['age: 18', ['beijing', 'wuhan']] info_other_name = person_info # 别名,他们是在同一个地址上,改变任意一个,另外的跟着改变(可以减少不必要的内存开销) print id(info_other_name), id(person_info) # 地址一样 person_info[0] = 'age: 23' # 改变原地址年龄,info_other_name也跟着变,因为就是一个东西 print u'原来的值', person_info print u'别名的值', info_other_name
输出结果
47750200 47750200 原来的值 ['age: 23', ['beijing', 'wuhan']] 别名的值 ['age: 23', ['beijing', 'wuhan']]
浅复制
浅复制表示只复制表面一层,再深的层次还是指向他原来的地址。
import copy person_info = ['age: 18', ['beijing', 'wuhan']] info_shallow_copy = copy.copy(person_info) # 浅复制 只复制第一层,其他层还是指向它原来的地址 print id(info_shallow_copy), id(person_info) # 地址不一样 person_info[0] = 'age: 23' # 此处改年龄,person并没有跟着改变 person_info[1].remove('wuhan') # 删除列表里的下一级列表,会跟着改变 print u'原来的值', person_info print u'浅复制的值', info_shallow_copy
输出结果
47791200 47769360 # 地址不一样 原来的值 ['age: 23', ['beijing']] 浅复制的值 ['age: 18', ['beijing']] # 表面上的一层(年龄),独立于原来的值,但往下一层指向的地址还是原来的指向
深复制
深复制之后,所有的内容都独立于原变量存在。
import copy person_info = ['age: 18', ['beijing', 'wuhan']] info_deep_copy = copy.deepcopy(person_info) # 深复制 全部都都复制过来,都不会跟着改变 print id(info_deep_copy), id(person_info) # 地址不一样 person_info[0] = 'age: 23' person_info[1].remove('wuhan') print u'原来的值',person_info print u'深复制的值',info_deep_copy
输出结果
54781712 54859536 原来的值 ['age: 23', ['beijing']] 深复制的值 ['age: 18', ['beijing', 'wuhan']] # 完全独立于原来的变量
转载于:https://www.cnblogs.com/huahua12/p/8531017.html
别名、浅复制与深复制相关推荐
- java自我复制_原型模式--自我复制(结合Java浅复制与深复制)
原型模式,字面上的理解,以原型为标杆的模式. 原型模式其实就是从一个对象再创建另外一个可定制对象,而且不需知道任何创建的细节. 我们可以用原型示例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. ...
- android 浅复制与深复制
今天,简单讲讲 android 浅复制与深复制的内容. 一.前言 任何变成语言中,其实都有浅拷贝和深拷贝的概念,Java 中也不例外.在对一个现有的对象进行拷贝操作的时候,是有浅拷贝和深拷贝之分 ...
- JAVA中浅复制与深复制
來源:http://coolmist.javaeye.com/blog/127455 1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引 ...
- python浅复制与深复制_Python中的浅复制与深复制
python浅复制与深复制 In python, the assignment operator does not copy the objects, instead, they create bin ...
- 详解Python中的浅复制与深复制
列表对象的copy()方法返回列表的浅复制.所谓浅复制,是指生产一个新的列表,并且把原列表中所有元素的引用都复制到新列表中.如果原列表中只包含整数.实数.复数等基本类型或元组.字符串这样的不可变类型, ...
- 深度解析javascript中的浅复制和深复制
在谈javascript的浅复制和深复制之前,我们有必要在来讨论下js的数据类型.我们都知道有Number,Boolean,String,Null,Undefined,Object五种类型.而Obje ...
- java引用复制_Java中引用的浅复制和深复制
Java中除了基本类型int,char,double等的赋值是按照值传递之外,其余的类型和对象都是按照引用进行传递的. 下面来看一个关于引用的例子. package referenceCopy; // ...
- 也来谈一谈js的浅复制和深复制
2019独角兽企业重金招聘Python工程师标准>>> 1.浅复制VS深复制 本文中的复制也可以称为拷贝,在本文中认为复制和拷贝是相同的意思.另外,本文只讨论js中复杂数据类型的复制 ...
- C++ 浅复制、深复制详解
文章目录 浅复制 深复制 有关浅复制与深复制的定义为:对类进行复制的时候按位复制,即把一个对象各数据成员的值原样复制到目标对象中.当类中涉及到指针类型数据成员的时候,往往就会产生指针悬挂问题. 浅复制 ...
- Java中Cloneable接口的浅复制与深复制
Java中的深拷贝(深复制)和浅拷贝(浅复制) 深拷贝(深复制)和浅拷贝(浅复制)是两个比较通用的概念,尤其在C++语言中,若不弄懂,则会在delete的时候出问题,但是我们在这幸好用的是Java.虽 ...
最新文章
- MapReduce之单词计数
- 各种页面刷新代码大全,asp/javascript刷新页面代码
- JavaSE(十九)——equals() 和 == 的区别
- QTP自动化测试视频系列
- opencv同时开启两个外接USB摄像头采集图像信息,并设置摄像头输出图像的分辨率
- linux 酷炫的命令行
- 左神算法:反转单向和双向链表(Java版)
- jQuery使用():Deferred有状态的回调列表(含源码)
- 取消过账oracle,总帐过帐是状态是“正在处理” 如何处理?
- Elasticsearch的javaAPI之get,delete,bulk
- PHP中的数组(排序)
- c语言图片百叶窗特效,Flash遮罩特效实例--百叶窗效果
- html美化select样式,CSS美化select下拉框
- 什么是 VXLAN 技术?
- struct lnode{}Lnode后面的Lnode是什么意思
- 多双系统下蓝牙键盘鼠标的共享配对问题解决办法:win + debian + arch~IRK、LTK、ERand、EDIV、CSRK
- 虚函数占用类空间大小(转)
- 周鸿祎:360 基本不触碰用户数据;苹果与亚马逊被指控合谋推高 iPhone 等产品价格|极客头条
- 《Understanding and Diagnosing Visual Tracking Systems》论文笔记
- Linux 下 美化字体