博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深浅拷贝
阅读量:6259 次
发布时间:2019-06-22

本文共 970 字,大约阅读时间需要 3 分钟。

可变对象-不可变对象

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

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

上面说的a,b都是整数,整数是不可变对象,如果是可变对象的话,就是另外一回事了。

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

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

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

【拷贝】

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

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

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

   >>> import copy

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

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

 

  • 如果字典只有顶级对象:

 

 

  • 如果字典中嵌套对象:

 

【结论】

 

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

转载于:https://www.cnblogs.com/yifugui/p/8193605.html

你可能感兴趣的文章
Yii用ajax实现无刷新检索更新CListView数据
查看>>
App 卸载记录
查看>>
南京大学周志华教授当选欧洲科学院外籍院士
查看>>
计算机网络与Internet应用
查看>>
Mars说光场(3)— 光场采集
查看>>
Django 文件下载功能
查看>>
走红日本 阿里云如何能够赢得海外荣耀
查看>>
qt 学习之路2
查看>>
线上应用故障排查之二:高内存占用
查看>>
第四次作业
查看>>
异常处理汇总 ~ 修正果带着你的Code飞奔吧!
查看>>
BFS --- 素数环
查看>>
PCIE_DMA:xapp1052学习笔记
查看>>
python ----字符串基础练习题30道
查看>>
uva-10879-因数分解
查看>>
python 调用aiohttp
查看>>
Spring Boot中使用MyBatis注解配置详解
查看>>
linux下文件的一些文件颜色的含义
查看>>
跨域iframe高度自适应(兼容IE/FF/OP/Chrome)
查看>>
如何花更少的时间学习更多的知识
查看>>