python 深浅拷贝小记
浅拷贝:只拷贝第一层的数据
深拷贝:相当于克隆 一份,也就是完全复制,和被克隆对象完全没关系。
浅拷贝示例:
先定义一个列表
>>> 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 深浅拷贝小记的更多相关文章
- Python开发【第二章】:Python深浅拷贝剖析
Python深浅拷贝剖析 Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果. 下面本文就通过简单的例子介绍一下这些概念之间的差别. 一.对象赋值 ...
- 小学生都能学会的python(深浅拷贝)
小学生都能学会的python(深浅拷贝) join() 把列表中的每一项用字符串拼接起来 # lst = ["汪峰", "吴君如", "李嘉欣&quo ...
- 【0806 | Day 9】三张图带你了解数据类型分类和Python深浅拷贝
一.数据类型分类 二.Python深浅拷贝
- 底层剖析Python深浅拷贝
底层剖析Python深浅拷贝 拷贝的用途 拷贝就是copy,目的在于复制出一份一模一样的数据.使用相同的算法对于产生的数据有多种截然不同的用途时就可以使用copy技术,将copy出的各种副本去做各种不 ...
- 关于python深浅拷贝的个人浅见
起初,关于python的深浅拷贝,总是习惯去用传值传址的方式去考虑,发现总是get不到规律,容易记混. python有着高度自治的内存管理,而不可变对象的内存分配,则是能省则省,就是说,无论用什么拷贝 ...
- python深浅拷贝与赋值
初学编程的小伙伴都会对于深浅拷贝的用法有些疑问,今天我们就结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一——python的变量及其存储 在详细的了解python中赋 ...
- python 深浅拷贝 进阶
主要理解新与旧究竟在哪里 这样也就理解了 深浅拷贝 先说说赋值,事实上python中的赋值事实上是赋值了一个引用.比如: foo1=1.0 foo2=foo1 用操作符is推断时.你能够发现结果是tr ...
- python深浅拷贝&垃圾回收&上下文管理(with语句)
深浅拷贝 在Python中使用copy模块用于对象的拷贝操作. 该模块提供了两个主要的方法:浅拷贝 copy.copy() 深拷贝 copy.deepcopy() 1.浅拷贝(copy) 浅拷贝: 不 ...
- 关于Python深浅拷贝
拷贝: 说明:原则上就是把数据分离出来,复制其数据,并以后修改互不影响. 何来深浅拷贝的说法? 深浅拷贝的“深”和“浅”可以理解为从变量到硬盘上的物理存储介质之间的层次的多少. 下面用一个示例来解释浅 ...
随机推荐
- word break相关问题的解法
https://leetcode.com/problems/word-break/?tab=Description 以及 https://leetcode.com/problems/concatena ...
- hdoj 1429 胜利大逃亡(续) 【BFS+状态压缩】
题目:pid=1429">hdoj 1429 胜利大逃亡(续) 同样题目: 题意:中文的,自己看 分析:题目是求最少的逃亡时间.确定用BFS 这个题目的难点在于有几个锁对于几把钥匙.唯 ...
- Android Bitmap太大导致ImageView不显示的问题
今天做我们的智能相冊的项目时,遇到了非常奇妙的问题,当照片太大时,导致ImageView.setImageBitmap不显示,上网上搜了非常多办法.感觉都不是那么靠谱.最后使用了简单粗暴的手段: // ...
- bzoj4873: [Shoi2017]寿司餐厅(最大权闭合子图)
4873: [Shoi2017]寿司餐厅 大难题啊啊!!! 题目:传送门 题解:一眼题是网络流,但还是不会OTZ,菜啊... %题解... 最大权闭合子图!!! 好的...开始花式建边: 1.对于每个 ...
- IIS访问站点,出现connection refused
排查后,发现是因为使用了代理导致的. 需要设置 Don't use the proxy server for local addresses.
- struts2入门(搭建环境、配置、示例)
转自:https://blog.csdn.net/u012862311/article/details/53412716 1.下载Struts2的jar包 下载地址:http://archive.ap ...
- grvphviz && dot脚本语言
安装graphviz 可去官网下载http://www.graphviz.org/download/下载之后按步骤安装 打开编辑器,创建*.dot文件,编辑dot脚本代码,保存. D:\>dot ...
- python制造模块
制造模块: 方法一: 1.mkdir /xxcd /xx 2.文件包含: 模块名.py setup.py setup.py内容如下:#!/usr/bin/env pythonfrom distutil ...
- LINUX 上源代码安装与配置samba服务,支持从windows上读写LINUX文件。
###动机###在windows编写代码文件比较方便,因为有source insight.但是需要在LINUX上编译.一种办法就是使用samba文件共享. [1] 下载samba代码.按照config ...
- php实现自动加载类
PHP 实现自动加载类: