python 中深拷贝和浅拷贝的区别
通俗的理解,浅就是外面,深就是里面。浅拷贝的意思就是只拷贝外面的一层,深拷贝就是拷贝的里面的所有。
看两段代码:
元组:
#!/usr/bin/env/python
# -*-coding:utf-8-*-
# authour:xiapmin_pei import copy
#定义一个元组,元组里面有一个列表,可以理解成内部
atuple=(1,2,3,[4,5])
#将元组赋值给b
b = atuple
#浅拷贝
c = copy.copy(atuple)
#深拷贝
d = copy.deepcopy(atuple)
#打印每个对象的值
print "b is {0},c is {1},d is {2}".format(b,c,d) #改变atuple里面内嵌的列表,给列表增加一个6
atuple[3].append(6) print "b is {0},c is {1},d is {2}".format(b,c,d) 结果:可以看出来,将atuple赋值给b,b和atuple始终是一致的
浅拷贝外面一层不会变,但是嵌套的列表会改变
深拷贝只和atuple的原始一样,不会随着atuple的改变而改变
b is (1, 2, 3, [4, 5]), c is (1, 2, 3, [4, 5]), d is (1, 2, 3, [4, 5])
b is (1, 2, 3, [4, 5, 6]),  c is (1, 2, 3, [4, 5, 6]),  d is (1, 2, 3, [4, 5])
列表:
#!/usr/bin/env/python
# -*-coding:utf-8-*-
# authour:xiapmin_pei import copy alist = [1,2,3,[4,5]] b = alist
c = copy.copy(alist)
d = copy.deepcopy(alist) print "alist是{0},b是{1}, c是{2}, d是{3}".format(alist,b,c,d) alist[3].append(6) print "alist是{0},b是{1}, c是{2}, d是{3}".format(alist,b,c,d) alist.append(7) print "alist是{0},b是{1}, c是{2}, d是{3}".format(alist,b,c,d) 结果:可以看出来,将alist赋值给b,b无论怎么变化,都是和alist是一样的
浅拷贝copy只拷贝第一层,第一层不改变,但是嵌套的列表随着alist的改变而改变
深拷贝deepcopy只和原先的alist是一致的,无论alist怎么改变,deepcopy只拷贝一次原先的。
alist是[1, 2, 3, [4, 5]],b是[1, 2, 3, [4, 5]], c是[1, 2, 3, [4, 5]], d是[1, 2, 3, [4, 5]]
alist是[1, 2, 3, [4, 5, 6]],b是[1, 2, 3, [4, 5, 6]],  c是[1, 2, 3, [4, 5, 6]],  d是[1, 2, 3, [4, 5]]
alist是[1, 2, 3, [4, 5, 6], 7],b是[1, 2, 3, [4, 5, 6], 7],  c是[1, 2, 3, [4, 5, 6]],  d是[1, 2, 3, [4, 5]]
python 中深拷贝和浅拷贝的区别的更多相关文章
- Python中深拷贝与浅拷贝的区别
		
转自:http://blog.csdn.net/u014745194/article/details/70271868 定义: 在Python中对象的赋值其实就是对象的引用.当创建一个对象,把它赋值给 ...
 - python 中 深拷贝和浅拷贝的理解
		
在总结 python 对象和引用的时候,想到其实 对于python的深拷贝和浅拷贝也可以很好对其的进行理解. 在python中,对象的赋值的其实就是对象的引用.也就是说,当创建一个对象,然后赋给另外一 ...
 - python中深拷贝和浅拷贝
		
python中所谓浅拷贝就是对引用的拷贝,所谓深拷贝就是对对象的资源的拷贝. 首先,对赋值操作我们要有以下认识: 赋值是将一个对象的地址赋值给一个变量,让变量指向该地址( 旧瓶装旧酒 ). 修改不可变 ...
 - python中深拷贝与浅拷贝
		
# 1.浅拷贝(复制东西)a = [11,22,33] # 实际上是浅拷贝# 没有把这个变量的值赋进去,而是把另一个变量的地址拿过去了,就叫浅拷贝.b = a # print(id(a))# prin ...
 - Python中深拷贝与浅拷贝区别
		
浅拷贝, list值是可变的,str值不可变,只能重新赋值 a=b=c='wjx'print(a,b,c)c= 'jmy'#重新赋值了,所以内存分配了新的地址print(a,b,c)print(id( ...
 - 关于Python中深拷贝与浅拷贝的理解(一)---概念
		
import copy a = [1, 2, 3, 4, ['a', 'b']] #原始对象 b = a #赋值,传对象的引用 c = copy.copy(a) #对象拷贝,浅拷贝 d = copy. ...
 - Python 深拷贝和浅拷贝的区别
		
python的复制,深拷贝和浅拷贝的区别 在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 ...
 - Python中type与Object的区别
		
Python中type与Object的区别 在查看了Python的API后,总算明白了.现在总结如下: 先来看object的说明: Python中关于object的说明很少,甚至只有一句话: clas ...
 - Python中生成器和迭代器的区别(代码在Python3.5下测试):
		
https://blog.csdn.net/u014745194/article/details/70176117 Python中生成器和迭代器的区别(代码在Python3.5下测试):Num01–& ...
 
随机推荐
- mysql高可用架构之MHA,haproxy实现读写分离详解
			
MySQL高可用架构之MHA 一.运维人员需要掌握的MySQL技术: 1.基本SQL语句 2.基本的管理[库表数据的管理 权限的管理] 3.容灾 保证数据不丢失. 二.工作中MySQ ...
 - 用 Python分析朋友圈好友的签名
			
需要用到的第三方库: numpy:本例结合wordcloud使用 jieba:对中文惊进行分词 PIL: 对图像进行处理(本例与wordcloud结合使用) snowlp:对文本信息进行情感判断 wo ...
 - MySQL系列:视图基本操作(3)
			
1. 视图简介 1.1 视图定义 视图是一种虚拟的表,是从数据库中一个或多个表中导出来的表. 视图可以从已存在的视图的基础上定义. 数据库中只存放视图的定义,并没有存放视图中的数据,数据存放在原来的表 ...
 - Python的web编程
			
1.urlparse模块 urlparse.urlparse() 将一个url转化为(prot_sch, net_loc, path, params, query, frag)的元组 url ...
 - linux 查看网段内所有IP
			
如有转载,不胜荣幸.http://www.cnblogs.com/aaron-agu/ 方法一: nmap –nsP 192.168.1.0/24 #从192.168.1.0到192.168.1.25 ...
 - Delphi之TComponent类
			
TComponent类 TComponent类直接由TPersistent派生.TComponent的独特特征是它的属性能够在设计期间通过ObjectInspector来控制,能够拥有其他组件.非可视 ...
 - ORACLE 增加两列字段
			
declare v_cnt number; V_SQL VARCHAR2 (500) := '';begin select count(*) into v_cnt from dual where ex ...
 - 【数模】day06-数理统计I
			
数理统计. 以样本推断总体,进而用总体研究问题. 分两部分学习,第一部分是基础统计.参数估计.假设检验以及bootstrap方法. 1. 基础统计 假设有如下数据: 要做频数表.直方图.折线图.饼状图 ...
 - Zookeeper注册中心底层实现小记
			
内容摘自微信公众号,程序员小灰.推荐-ing Zookeeper的数据模型 Zookeeper的数据模型是什么样子呢?它很像数据结构当中的树,也很像文件系统的目录. 树是由节点所组成,Zookeepe ...
 - jenkins运行脚本生成HTML报告时遇到的问题
			
1.jenkins生成HTML报告 1)安装插件:HTML Publisher plugin 2)系统管理->插件管理->安装HTMLHTML Publisher plugin 2.job ...