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

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

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

>>> 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. iOS开发- Images can’t contain alpha channels or transparencies 解决的方法

    新版的iTunesConnect真是各种问题阿... 蛋疼要命. 上传介绍图片(屏幕截图)的时候 , 遇到了这个问题 Images can't contain alpha channels or tr ...

  2. CSS中的相关概念

    CSS的几个概念: 包括块:一个元素的"布局上下文".对于正常的HTML文本流中的一个元素,包括块由近期的块级祖先框.表单元格或行内块祖先框的内容边界(content edge)构 ...

  3. ACdream 1139(Sum-逆元)

    J - Sum Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) SubmitStatu ...

  4. 反弹木马——本质上就是一个开80端口的CS程序,伪造自己在浏览网页

    反弹端口型木马分析了防火墙的特性后发现:防火墙对于连入的链接往往会进行非常严格的过滤,但是对于连出的链接却疏于防范.于是,与一般的木马相反,反弹端口型木马的服务端(被控制端)使用主动端口,客户端(控制 ...

  5. 4. idea常用快捷键设置(改为eclipse相似)

    转自:https://blog.csdn.net/loveer0/article/details/82697877 idea常用快捷键设置(改为eclipse相似) 目录 idea常用快捷键设置改为e ...

  6. Dictionaries

    A dictionary is like a list, but more general. In a list, the indices have to be integers; in a dict ...

  7. 如何配置MySQL?(三)

    要进行mysql配置,首先要找到mysql的配置向导文件,这个配置向导文件就在我们安装目录下的一个bin的子目录下. 刚才我们是选择典型安装MySQL,一般windows是默认存储在C:\Progra ...

  8. leetcode 生成杨辉三角形, 118 119 Pascal's Triangle 1,2

    Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5, Retu ...

  9. POJ TOYS(叉积的妙用+二分答案)

    TOYS Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 16042   Accepted: 7688 Description ...

  10. UI Framework-1: views Windowing

    views Windowing views provides support for creating dialog boxes and other kinds of windows through ...