浅拷贝:只拷贝第一层的数据

深拷贝:相当于克隆 一份,也就是完全复制,和被克隆对象完全没关系。

浅拷贝示例:
先定义一个列表

>>> s = [1,'alex','alvin']

>>> s2 = copy.copy(s)  使用copy()方法拷贝,创建一个新的对象s2

>>> print s2    拷贝之后s2对象和s对象的内容一样。

[1,'alex','alvin']

>>> s2[0] = 3    修改s2对象的值

>>> print s2

[3,'alex','alvin']    打印s2,发现s2对象的值发生了变化

>>> print s

[1,'alex','alvin']    而对应的s对象的值却没有发生任何变化

总结:简单的copy拷贝,新创建的对象和被拷贝的对象之间没有关系,两者修改任意一个对象的值,都不会对对方产生影响。

>>> s = [[1,2],'alex','alvin']

>>> s3 = copy.copy(s)    做拷贝

>>> print s      

[[1,2],'alex','alvin']

>>> print s3

[[1,2],'alex','alvin']    在这一步之前s和s2输出的值都是一样的。

>>> s3[1] = 'linux'    修改s2对象的值,这里一步s2发生变化,s不会发生变化,两者没有影响。

>>> print s3

[[1,2],'linux','alvin']

>>> print s

[[1,2],'alex','alvin']

>>> s3[0][1] = 3  这里修改了s2列表里面的子列表的值,打印s和s2发现两个对象的子列表的值都发生了变化。

>>> print s3

[[1,3],'linux','alvin']

>>> print s

[[1,3],'linux','alvin']

深拷贝示例:
import copy    深拷贝需要导入copy模块

>>> import copy
>>> husband=['xiaoming',23,[1200,1344]]
>>> print husband
['xiaoming', 23, [1200, 1344]]
>>> xiaosan=copy.copy(husband)      copy.copy()是代表浅拷贝
>>> print xiaosan
['xiaoming', 23, [1200, 1344]]

>>> xiaoer = copy.deepcopy(husband)    copy.deepcopy()代表深拷贝
>>> print xiaoer
['xiaoming', 23, [1200, 1344]]

>>> husband[2].append(100)
>>> print husband
>>> ['xiaoming', 23, [1200, 1344, 100]]

>>> print xiaosan
>>> ['xiaoming', 23, [1200, 1344, 100]]

>>> print xiaoer
>>> ['xiaoming', 23, [1200, 1344]]

总结:如果被拷贝的对象中只是一个独立的列表,此对象中没有嵌套子列表,那么在做浅拷贝的过程中,会创建一个完全独立的新对象,这样无论操作哪个对象,都不会对对方产生影响。

但是如果被拷贝的列表中嵌套了子列表,那么浅拷贝的过程中,新对象只拷贝了对应子列表的一个指针, 这种情况下就出现了浅拷贝示例中,修改了新对象的子列表中的值会发现老的对象中的值也相应的发生了改变。

这里也就是说,浅拷贝中只拷贝了子列表的指针,即浅拷贝只能拷贝一个对象的第一层,无法拷贝第二层、第三层等(这里就是指的子列表)。

如果这里需要实现这种功能,即拷贝原对象的子列表,并且在操作原对象和新对象的过程中互不影响,则可以通过深拷贝来实现。这种思想不只针对列表,也同样适用于其他的数据类型。

python 深浅拷贝小记的更多相关文章

  1. Python开发【第二章】:Python深浅拷贝剖析

    Python深浅拷贝剖析 Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果. 下面本文就通过简单的例子介绍一下这些概念之间的差别. 一.对象赋值 ...

  2. 小学生都能学会的python(深浅拷贝)

    小学生都能学会的python(深浅拷贝) join() 把列表中的每一项用字符串拼接起来 # lst = ["汪峰", "吴君如", "李嘉欣&quo ...

  3. 【0806 | Day 9】三张图带你了解数据类型分类和Python深浅拷贝

    一.数据类型分类 二.Python深浅拷贝

  4. 底层剖析Python深浅拷贝

    底层剖析Python深浅拷贝 拷贝的用途 拷贝就是copy,目的在于复制出一份一模一样的数据.使用相同的算法对于产生的数据有多种截然不同的用途时就可以使用copy技术,将copy出的各种副本去做各种不 ...

  5. 关于python深浅拷贝的个人浅见

    起初,关于python的深浅拷贝,总是习惯去用传值传址的方式去考虑,发现总是get不到规律,容易记混. python有着高度自治的内存管理,而不可变对象的内存分配,则是能省则省,就是说,无论用什么拷贝 ...

  6. python深浅拷贝与赋值

    初学编程的小伙伴都会对于深浅拷贝的用法有些疑问,今天我们就结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一——python的变量及其存储 在详细的了解python中赋 ...

  7. python 深浅拷贝 进阶

    主要理解新与旧究竟在哪里 这样也就理解了 深浅拷贝 先说说赋值,事实上python中的赋值事实上是赋值了一个引用.比如: foo1=1.0 foo2=foo1 用操作符is推断时.你能够发现结果是tr ...

  8. python深浅拷贝&垃圾回收&上下文管理(with语句)

    深浅拷贝 在Python中使用copy模块用于对象的拷贝操作. 该模块提供了两个主要的方法:浅拷贝 copy.copy() 深拷贝 copy.deepcopy() 1.浅拷贝(copy) 浅拷贝: 不 ...

  9. 关于Python深浅拷贝

    拷贝: 说明:原则上就是把数据分离出来,复制其数据,并以后修改互不影响. 何来深浅拷贝的说法? 深浅拷贝的“深”和“浅”可以理解为从变量到硬盘上的物理存储介质之间的层次的多少. 下面用一个示例来解释浅 ...

随机推荐

  1. Linux的中断和系统调用 & esp、eip等寄存器

    http://www.linuxidc.com/Linux/2012-11/74486.htm 一共三篇 中断一般分为三类: 1.由计算机硬件异常或故障引起的中断,称为内部异常中断: 2.由程序中执行 ...

  2. 数据结构之---C语言实现拓扑排序AOV图

    //有向图的拓扑排序 //杨鑫 #include <stdio.h> #include <stdlib.h> #include <string.h> #define ...

  3. Android平台Camera实时滤镜实现方法探讨(九)--磨皮算法探讨(一)

    上一篇开头提到了一些可用于磨皮的去噪算法.以下我们实现这些算法而且观察效果,咱不考虑实时性的问题 本文首先探讨的首先是<基于局部均方差相关信息的图像去噪及其在实时磨皮美容算法中的应用> 该 ...

  4. HDOJ1084 What Is Your Grade?

    What Is Your Grade? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  5. IIS Express加入MIME映射

    近期在用Grid Report做Web报表的时候,碰到一件非常挠头的事. 本地用VS2010写的代码,调试的时候Web报表无法显示,用24.248server上VS2013相同仍是无法显示.最后把项目 ...

  6. Cannot find the class file for javax.servlet.ServletContext.

    当eclipse中新导入的Java Project的时候.往往会碰到各种各样的问题,以下是个典型的问题: Cannot find the class file for javax.servlet.Se ...

  7. 10gR2 rac怎样重跑root.sh ?

    原文博客链接地址:10gR2 rac怎样重跑root.sh ? 前几天遇到一客户的10205 rac,出现LMD进程IPC SEND TIMEOUT问题. 准备深入研究下Oracle RAC 的LMO ...

  8. ssh跳板登陆太麻烦,使用expect每次自动登录 利用expect 模拟键盘动作,在闲置时间之内模拟地给个键盘响应

    #!/usr/bin/expect -f #设置超时时间 set timeout #这里设置了跳板机的密码 set password "你的跳板机密码" #连接跳板机 spawn ...

  9. zzulioj--1807--小明在努力(递归)

    1807: 小明在努力 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 95  Solved: 35 SubmitStatusWeb Board Des ...

  10. <Three.js>(第一节)环境搭建

    Three.js顾名思义3D的js库.是运行在浏览器的基于webgl的3D引擎.该引擎是github上的一个开源项目,下载地址:https://github.com/mrdoob/three.js/ ...