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

Python3.5(十)深浅拷贝问题

时间:2017-08-30 01:02:49      阅读:276      评论:0      收藏:0      [点我收藏+]

标签:pytho   span   div   分享   空间   article   切片   tail   .net   

可变对象-不可变对象

在Python中不可变对象指:一旦创建就不可修改的对象,包括字符串,元祖,数字

在Python中可变对象是指:可以修改的对象,包括:列表、字典

 

>>> L1 = [2,3,4]      #L1变量指向的是一个可变对象:列表  
>>> L2 = L1           #将L1值赋给L2后,两者共享引用同一个列表对象[1,2,3,4]  
>>> L1[0] = 200       #因为列表可变,改变L1中第一个元素的值  
>>> L1; L2            #改变后,L1,L2同时改变,因为对象本身值变了  
[200, 3, 4]  
[200, 3, 4]  

如果不想改变列表L2的值,有两种方法:切片  copy模块

>>> L1 = [2,3,4]   
>>> L2 = L1  
>>> id(L1);id(L2)     #共享引用一个可变对象  
45811784L  
45811784L  
>>> L2 = L1[:]        #切片操作  
>>> id(L1);id(L2)     #切片后,对象就不一样了  
45811784L  
45806920L  
>>> L1[0] = 200  
>>> L1;L2             #L1发生改变,L2没有变化  
[200, 3, 4]  
[2,   3, 4]  

【拷贝】

1. 切片技术应用于所有的序列,包括:列表、字符串、元祖 

但切片不能应用于字典。对字典只能使用D.copy()方法或D.deepcopy()方法.

技术分享

2. 深浅拷贝,即可用于序列,也可用于字典

   >>> import copy

   >>> X = copy.copy(Y)      #浅拷贝:只拷贝顶级的对象,或者说:父级对象

   >>> X = copy.deepcopy(Y)  #深拷贝:拷贝所有对象,顶级对象及其嵌套对象。或者说:父级对象及其子对象

如果字典只有顶级对象

技术分享

  • 如果字典中嵌套对象:

技术分享

 D和C1变,C2不变

 

【结论】

 

  • 深浅拷贝都是对源对象的复制,占用不同的内存空间
  • 如果源对象只有一级目录的话,源做任何改动,不影响深浅拷贝对象
  • 如果源对象不止一级目录的话,源做任何改动,都要影响浅拷贝,但不影响深拷贝
  • 序列对象的切片其实是浅拷贝,即只拷贝顶级的对象

转载http://blog.csdn.net/jerry_1126/article/details/41852591

 

 

Python3.5(十)深浅拷贝问题

标签:pytho   span   div   分享   空间   article   切片   tail   .net   

原文地址:http://www.cnblogs.com/p0yz/p/7450947.html

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