码迷,mamicode.com
首页 > 编程语言 > 详细

Python:深浅拷贝

时间:2016-09-06 15:26:39      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:

导入模块:

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

标签:

原文地址:http://www.cnblogs.com/ping-y/p/5845462.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!