导入模块:

>>> import copy

深浅拷贝:

>>> X = copy.copy(Y) #浅拷贝:只拷贝顶级的对象,或者说:父级对象
>>> X = copy.deepcopy(Y) #深拷贝:拷贝所有对象,顶级对象及其嵌套对象。或者说:父级对象及其子对象

例:

>>> D = {'name':'jack','age':20}
>>> C1 = copy.copy(D)
>>> C2 = copy.deepcopy(D)
>>> id(D);id(C1);id(C2)
53035208
53611144
53610248
>>> D['name'] = 'tom' #改变源
>>> D;C1;C2
{'age': 20, 'name': 'tom'}
{'age': 20, 'name': 'jack'}
{'age': 20, 'name': 'jack'}

如果有嵌套:

D = {'name':{'first':'john','last':'lee'},'job':['IT','HR']}
>>> C1 = copy.copy(D)
>>> C2 = copy.deepcopy(D)
>>> D;C1;C2
{'job': ['IT', 'HR'], 'name': {'first': 'john', 'last': 'lee'}}
{'job': ['IT', 'HR'], 'name': {'first': 'john', 'last': 'lee'}}
{'job': ['IT', 'HR'], 'name': {'first': 'john', 'last': 'lee'}}
>>> id(D);id(C1);id(C2)
53018568
53611592
53610056
>>>
>>> D['job'][0] = 'RRRR' #修改其中一个元素
>>> D;C1;C2
{'job': ['RRRR', 'HR'], 'name': {'first': 'john', 'last': 'lee'}}
{'job': ['RRRR', 'HR'], 'name': {'first': 'john', 'last': 'lee'}}
{'job': ['IT', 'HR'], 'name': {'first': 'john', 'last': 'lee'}}

#结论:
(1)深浅拷贝都是对源对象的复制,占用不同的内存空间
(2)如果源对象只有一级目录的话,源做任何改动,不影响深浅拷贝对象
(3)如果源对象不止一级目录的话,源做任何改动,都要影响浅拷贝,但不影响深拷贝
(4)序列对象的切片其实是浅拷贝,即只拷贝顶级的对象

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深浅拷贝

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

  10. python 深浅拷贝 for循环删除

    ###########################总结########################### 1. 基础数据类型补充 大多数的基本数据类型的知识.已经学完了 a='aaaa' ls ...

随机推荐

  1. weblogic日志管理

    服务器日志  每个 WebLogic Server 实例将来自子系统和应用程序的所有消息写入位于本地主机上的服务器日志文件.默认情况下,服务器日志文件位于服务器实例根目录下的 logs 目录中: 例如 ...

  2. 转: 如何选CDN:互联网大直播时代的CDN选择指南

    from:  http://www.chnvideo.com/blog-classic-cdn.html SRS 编码器   如何选CDN:互联网大直播时代的CDN选择指南 CDN是一个服务型的公司, ...

  3. Spring 让 LOB 数据操作变得简单易行,LOB 代表大对象数据,包括 BLOB 和 CLOB 两种类型

    转自:https://www.ibm.com/developerworks/cn/java/j-lo-spring-lob/index.html 概述 LOB 代表大对象数据,包括 BLOB 和 CL ...

  4. 转帖:HttpStatusCode状态说明C#版

    Continue 等效于 HTTP 状态 100.Continue 指示客户端可能继续其请求. SwitchingProtocols 等效于 HTTP 状态 101.SwitchingProtocol ...

  5. C++ 继承与接口 知识点 小结(一)

    [摘要] 要求理解覆盖.重载.隐藏的概念与相互之间的差别.熟记类继承中对象.函数的訪问控制:掌握虚函数.虚函数表.虚函数指针的联系:理解区分虚函数和虚继承在虚方法.虚指针在空间分配上的重点与难点:熟练 ...

  6. C 标准库 - <time.h>

    C 标准库 - <time.h> 简介 time.h 头文件定义了四个变量类型.两个宏和各种操作日期和时间的函数. 库变量 下面是头文件 time.h 中定义的变量类型: 序号 变量 &a ...

  7. 从TCP协议的原理来谈谈rst复位攻击

    在谈RST攻击前,必须先了解TCP:如何通过三次握手建立TCP连接.四次握手如何把全双工的连接关闭掉.滑动窗体是怎么数据传输的.TCP的flag标志位里RST在哪些情况下出现.以下我会画一些尽量简化的 ...

  8. 设计模式之中介者模式(Mediator)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程.它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  9. mysql 执行sql文件的方法

     http://philos.iteye.com/blog/162051   实战代码: #mysql导入mysql -um4n -p01D060A476642BA8335B832AC5B211F22 ...

  10. jvm基础(2)

    7.类装载器 (1)class装载验证流程: A加载.这是装载类的第一个阶段,执行的动作包括:取得类的二进制流,转为方法区数据结构,在java堆中生成对应的java.lang.Class对象. B链接 ...