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

python当中的深浅拷贝

时间:2016-06-03 22:59:12      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:

>>>import copy

>>> x={one:1,two:[second,third]}
>>> y=x.copy()  #y是x的浅拷贝
>>> x                #输出x
{two: [second, third], one: 1}
>>> y                #输出y
{two: [second, third], one: 1}
>>> y[one]=0  #对y的键‘one‘的值重新赋值
>>> x
{two: [second, third], one: 1}  #可以看到x的键‘one‘的值没有变
>>> y
{two: [second, third], one: 0}   #y的键‘one‘的值重新赋值后为0
>>> y[two].remove(third)           
#上面是删除y的键‘two‘的值列表里的第二个元素‘third‘
>>> x
{two: [second], one: 1}  
#可以看到x的键‘two‘的值列表里的第二个元素‘third‘也被删除了
>>> y
{two: [second], one: 0}
>>> x[two].remove(second)  
>>> x
{two: [], one: 1}                        
#x的键‘two‘的值列表里的第1个元素‘two‘被删除了
>>> y
{two: [], one: 0}
#y的键‘two‘的值列表里的第1个元素‘two‘被删除了
>>> x[two]=second
>>> x
{two: second, one: 1}
>>> y
{two: [], one: 0}

从上面一段代码可以看到只有删除元素时x才跟着改变,其它不改变,要解决删除时不跟着改变的问题,只有使用深拷贝

 1 >>> from copy import deepcopy          #导入深拷贝模块
 2 >>> x={one:1,two:[2,second]}
 3 >>> y=x.copy()                                  #y为x的浅拷贝
 4 >>> y2=x.deepcopy()                         #y2位x的深拷贝
 5 Traceback (most recent call last):         #错误示范
 6   File "<stdin>", line 1, in ?
 7 AttributeError: dict object has no attribute deepcopy
 8 >>> y2=deepcopy(x)                         
 9 #当采用深拷贝时,要把被深拷贝的对象当参数传入
10 >>> x                                               #输出x
11 {two: [2, second], one: 1}
12 >>> y                                               #输出y
13 {two: [2, second], one: 1}
14 >>> y2                                             #输出y2
15 {two: [2, second], one: 1}
16 >>> y[one]=first                            #对y的键‘one‘重新赋值为first
17 >>> x                                               #可以看到x没有变化
18 {two: [2, second], one: 1}
19 >>> y                                               #重新输出y
20 {two: [2, second], one: first}
21 >>> y2                                             #y2没有变化
22 {two: [2, second], one: 1}
23 >>> y2[one]=1first                        
24 #对y2的键‘one‘重新赋值为1first      
25 >>> x                                                #x没有变化
26 {two: [2, second], one: 1}
27 >>> y
28 {two: [2, second], one: first}       #y没有变化
29 >>> y2                                               #y2为重新赋值后的字典
30 {two: [2, second], one: 1first}
31 >>> x
32 {two: [2, second], one: 1}
33 >>> y[two].remove(2)
34 >>> x
35 {two: [second], one: 1}
36 >>> y
37 {two: [second], one: first}
38 >>> y2
39 {two: [2, second], one: 1first}
40 >>> y2[two].remove(second)         
41 #删除y2键‘two‘的值列表里的‘second‘
42 >>> x
43 {two: [second], one: 1}
44 >>> y
45 {two: [second], one: first}            #x,y都没有变化
46 >>> y2
47 {two: [2], one: 1first}                   #重新输出y2

 



python当中的深浅拷贝

标签:

原文地址:http://www.cnblogs.com/wspcoding/p/5557691.html

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