浅深copy
2018-09-10 01:06:31来源:博客园 阅读 ()
前言
列表中的每个元素在内存中都是相互独立的,有自己的唯一标识符,可以通过 id() 函数来查看元素在内存中的唯一标识符。
浅深copy在列表数据量比较大的情况下,不建议使用,比较消耗内存资源。
names1 = ['xiaoming',['xiaobai',18]]
names2 = names1.copy() # 浅copy print('names1=',names1,'唯一标识符是',id(names1)) print('names1列表的元素1的唯一标识符是',id(names1[0]),'元素2的唯一标识符是',id(names1[1])) print('\n') print('浅copy后names2的执行结果:') print('names2=',names2,'唯一标识符是',id(names2)) print('names2列表的元素1的唯一标识符是',id(names2[0]),'元素2的唯一标识符是',id(names2[1])) print('\n') names2[0] = '小明' names2[1][0] = '小白' print('names2元素值修改后的执行结果:') print('names2=',names2,'唯一标识符是',id(names2)) print('names2列表的元素1的唯一标识符是',id(names2[0]),'元素2的唯一标识符是',id(names2[1])) import copy #深copy names3 = copy.deepcopy(names1) print('\n') print('深copy后names3的执行结果:') print('names3=',names3,'唯一标识符是',id(names3)) print('names3列表的元素1的唯一标识符是',id(names3[0]),'元素2的唯一标识符是',id(names3[1])) names3[0] = '小刚' names3[1][0] = '小李' print('\n') print('names3元素值修改后的执行结果:') print('names3=',names3,'唯一标识符是',id(names3)) print('names3列表的元素1的唯一标识符是',id(names3[0]),'元素3的唯一标识符是',id(names3[1])) names1= ['xiaoming', ['xiaobai', 18]] 唯一标识符是 2511119409800 names1列表的元素1的唯一标识符是 2511120629936 元素2的唯一标识符是 2511119409736 浅copy后names2的执行结果: names2= ['xiaoming', ['xiaobai', 18]] 唯一标识符是 2511120630024 names2列表的元素1的唯一标识符是 2511120629936 元素2的唯一标识符是 2511119409736 names2元素值修改后的执行结果: names2= ['小明', ['小白', 18]] 唯一标识符是 2511120630024 names2列表的元素1的唯一标识符是 2511121340616 元素2的唯一标识符是 2511119409736 深copy后names3的执行结果: names3= ['xiaoming', ['小白', 18]] 唯一标识符是 2511121609480 names3列表的元素1的唯一标识符是 2511120629936 元素2的唯一标识符是 2511121470152 names3元素值修改后的执行结果: names3= ['小刚', ['小李', 18]] 唯一标识符是 2511121609480 names3列表的元素1的唯一标识符是 2511121340792 元素3的唯一标识符是 2511121470152
浅深copy就是在内存中把一个列表复制一份,占用了两份内存空间:
浅copy
元素值未修改前
names1和names2两个列表的唯一标识符不一样。names1的元素和names2的元素的唯一标识符是一样的(两个列表共享一份元素值)。
元素值修改后
names1和names2的元素1的唯一标识符不一样,names1和names2的元素2(子列表)的唯一标识符一样。
总结:一个列表浅copy后与原列表并非完全独立,两个列表的唯一标识符不一样,元素的唯一标识符不一样,在有子列表的情况下,子列表的元素的唯一标识符一致。
深copy
元素值未修改前
names1和names3两个列表的唯一标识符不一样。names1和names3的元素1的唯一标识符一样,names1和names3的元素2(子列表)的唯一标识符不一样。
元素值修改后
names1和names3的元素1的唯一标识符不一样,names1和names3的元素2(子列表)的唯一标识符不一样。
总结:一个列表深copy后与原列表完全独立,两个列表的唯一标识符不一样,元素的唯一标识符不一样。
编写时间:2018-09-07 21:58:01
修订时间:2018-09-07 22:42:04
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Web框架本质及浅谈HTTP协议
下一篇:第一篇随笔
- python深浅拷贝的理解和区分 2019-07-24
- python内置装饰器@property 2019-07-24
- 文本备份云仓库-python实用脚本下载 2019-07-24
- python操作日志的封装 2019-05-23
- 面向对象之元类(metaclass) 2019-05-22
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