别名

别名就是起另一个名字,实际上是同一个东西,地址完全一样,改变任意一个的值,另一个会随着改变。

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

别名、浅复制与深复制相关推荐

  1. java自我复制_原型模式--自我复制(结合Java浅复制与深复制)

    原型模式,字面上的理解,以原型为标杆的模式. 原型模式其实就是从一个对象再创建另外一个可定制对象,而且不需知道任何创建的细节. 我们可以用原型示例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. ...

  2. android 浅复制与深复制

    今天,简单讲讲  android 浅复制与深复制的内容. 一.前言 任何变成语言中,其实都有浅拷贝和深拷贝的概念,Java 中也不例外.在对一个现有的对象进行拷贝操作的时候,是有浅拷贝和深拷贝之分 ...

  3. JAVA中浅复制与深复制

    來源:http://coolmist.javaeye.com/blog/127455 1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引 ...

  4. python浅复制与深复制_Python中的浅复制与深复制

    python浅复制与深复制 In python, the assignment operator does not copy the objects, instead, they create bin ...

  5. 详解Python中的浅复制与深复制

    列表对象的copy()方法返回列表的浅复制.所谓浅复制,是指生产一个新的列表,并且把原列表中所有元素的引用都复制到新列表中.如果原列表中只包含整数.实数.复数等基本类型或元组.字符串这样的不可变类型, ...

  6. 深度解析javascript中的浅复制和深复制

    在谈javascript的浅复制和深复制之前,我们有必要在来讨论下js的数据类型.我们都知道有Number,Boolean,String,Null,Undefined,Object五种类型.而Obje ...

  7. java引用复制_Java中引用的浅复制和深复制

    Java中除了基本类型int,char,double等的赋值是按照值传递之外,其余的类型和对象都是按照引用进行传递的. 下面来看一个关于引用的例子. package referenceCopy; // ...

  8. 也来谈一谈js的浅复制和深复制

    2019独角兽企业重金招聘Python工程师标准>>> 1.浅复制VS深复制 本文中的复制也可以称为拷贝,在本文中认为复制和拷贝是相同的意思.另外,本文只讨论js中复杂数据类型的复制 ...

  9. C++ 浅复制、深复制详解

    文章目录 浅复制 深复制 有关浅复制与深复制的定义为:对类进行复制的时候按位复制,即把一个对象各数据成员的值原样复制到目标对象中.当类中涉及到指针类型数据成员的时候,往往就会产生指针悬挂问题. 浅复制 ...

  10. Java中Cloneable接口的浅复制与深复制

    Java中的深拷贝(深复制)和浅拷贝(浅复制) 深拷贝(深复制)和浅拷贝(浅复制)是两个比较通用的概念,尤其在C++语言中,若不弄懂,则会在delete的时候出问题,但是我们在这幸好用的是Java.虽 ...

最新文章

  1. MapReduce之单词计数
  2. 各种页面刷新代码大全,asp/javascript刷新页面代码
  3. JavaSE(十九)——equals() 和 == 的区别
  4. QTP自动化测试视频系列
  5. opencv同时开启两个外接USB摄像头采集图像信息,并设置摄像头输出图像的分辨率
  6. linux 酷炫的命令行
  7. 左神算法:反转单向和双向链表(Java版)
  8. jQuery使用():Deferred有状态的回调列表(含源码)
  9. 取消过账oracle,总帐过帐是状态是“正在处理” 如何处理?
  10. Elasticsearch的javaAPI之get,delete,bulk
  11. PHP中的数组(排序)
  12. c语言图片百叶窗特效,Flash遮罩特效实例--百叶窗效果
  13. html美化select样式,CSS美化select下拉框
  14. 什么是 VXLAN 技术?
  15. struct lnode{}Lnode后面的Lnode是什么意思
  16. 多双系统下蓝牙键盘鼠标的共享配对问题解决办法:win + debian + arch~IRK、LTK、ERand、EDIV、CSRK
  17. 虚函数占用类空间大小(转)
  18. 周鸿祎:360 基本不触碰用户数据;苹果与亚马逊被指控合谋推高 iPhone 等产品价格|极客头条
  19. 《Understanding and Diagnosing Visual Tracking Systems》论文笔记
  20. Linux 下 美化字体

热门文章

  1. 从零开始入门 K8s:深入剖析 Linux 容器
  2. 达摩院携手交通部公路科学研究院 探索国内首个道路智能解决方案
  3. Roguelike游戏的视野算法
  4. 数组声明为public final static缺陷
  5. Win10_MySQL环境搭建以及Navicat的使用全解
  6. 野史杂谈,西游记令人崩溃的真相
  7. AIX 系统中 PVID 的含义与作用
  8. rman backup database force 功能
  9. linux安装mysql的分支mariadb
  10. 「SDOI2016」储能表(数位dp)