python学习笔记--深拷贝与浅拷贝的区别
2018-12-04 07:06:11来源:博客园 阅读 ()
首先我们来讲讲我们python中的可变对象和不可变对象:
可变对象:该对象指向内存中的值是可以改变的。实际上是其所指的值直接发生改变,而不是发生复制,或者开辟一个新的地址空间。例如:列表list,字典dict,集合set。
不可变对象:该对象所指向的内存中的值是不能被改变的。当改变一个变量时,由于其所指的值不能被改变,相当于把原来的值复制一份到新开辟的地址,再进行改变,并将变量指向这个新的地址空间。例如:数值类型(int、float)、字符串str、元组tuple。
python中对象的赋值实际上是对象的引用,例如:
a = [1,2,3]
实际上在电脑内部是生成一个地址将list[1,2,3]
放在这个地址,在赋值给a时,就是讲a指向了这个地址。如果此时我们再执行 a = [4,5,6]
,并不是说在我们的内存中[1,2,3]
就不存在了,这个列表是一直存在的,只是我们将变量a指向了一个新的列表的地址。
- 下面我们讲讲浅拷贝(包含可变对象:此处可变为中间的list对象):
>>> alist=[1,2,3,["a","b"]]
>>> b = alist
>>>print b
[1,2,3,['a','b']]
>>> alist.append(5)
>>>print alist
[1,2,3,['a','b'],5]
>>>print b
[1,2,3,['a','b'],5]
在这个程序块中,当我们执行alist.append(5)
实际上改变的是alist这个变量指向的list,由于我们的变量b也是指向这个list,所以变量b的值也跟着改变。
- copy.copy()浅拷贝
这个copy.copy没有拷贝可变对象,即当可变对象发生变化时,所有的变量都会跟着发生变化。
例如:
>>>import copy
>>> c=copy.copy(alist)
>>>print alist;print c
[1,2,3,['a','b']]
[1,2,3,['a','b']]
>>> alist.append(5)
>>>print alist;print c
[1,2,3,['a','b'],5]
[1,2,3,['a','b']]
>>> alist[3]
['a','b']#这个对象是可变对象
>>> alist[3].append('cccc')
>>>print alist;print c
[1,2,3,['a','b','cccc'],5]
[1,2,3,['a','b','cccc']]
- copy.deepcopy拷贝了包含可变对象在内的所有对象
>>>import copy
>>> d=copy.deepcopy(alist)#此时d和alist是两个完全独立的对象
>>>print alist;print d
[1,2,3,['a','b']]
[1,2,3,['a','b']]始终没有改变
>>> alist.append(5)
>>>print alist;print d
[1,2,3,['a','b'],5]
[1,2,3,['a','b']]始终没有改变
>>> alist[3]
['a','b']
>>> alist[3].append("ccccc")
>>>print alist;print d
[1,2,3,['a','b','ccccc'],5]
[1,2,3,['a','b']]始终没有改变
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash