Python字典深浅拷贝与循环方式方法详解


Posted in Python onFebruary 09, 2020

本节内容

  • 深浅拷贝
  • 循环方式
  • 字典常用方法总结

一、深浅拷贝

列表、元组、字典(以及其他)

对于列表、元组和字典而言,进行赋值(=)、浅拷贝(copy)、深拷贝(deepcopy)而言,其内存地址是变化不通的。

赋值(=)

赋值只是创建一个变量,该变量指向原来的内存地址

>>> name1 = ['a','b',['m','n'],'c']
>>> name2 = name1
#输出结果,两个内存地址是一样的
>>> print(id(name1),',',id(name2))
50077256 , 50077256

 如图所示:

Python字典深浅拷贝与循环方式方法详解

 浅拷贝(copy)

浅拷贝是指在内存地址中,只拷贝出第一层的内存的地址,所以拷贝变量和被拷贝变量的内存地址是不一样的(列表、元组和字典中的copy()方法都是浅拷贝)

>>> import copy
>>> name1 = ['a','b',['m','n'],'c']
#浅copy
>>> name2 = copy.copy(name1)
>>> print(name1,',',id(name1))
['a', 'b', ['m', 'n'], 'c'] , 50228296
>>> print(name2,',',id(name2))
['a', 'b', ['m', 'n'], 'c'] , 50920008
#修改列表中的元素
>>> name1[0] = 'h'
>>> name1[2][0] = 'M'
>>> print(name1,',',id(name1))
['h', 'b', ['M', 'n'], 'c'] , 50228296
>>> print(name2,',',id(name2))
['a', 'b', ['M', 'n'], 'c'] , 50920008

 如图所示:

Python字典深浅拷贝与循环方式方法详解

注:因为浅拷贝只拷贝了第一层,所以拷贝的变量和被拷贝的变量的第二层的列表的内存地址是一样的。

>>> import copy
>>> name1 = ['a','b',['m','n'],'c']
>>> name2 = copy.copy(name1)
>>> name1[0] = 'h'
>>> name1[2][0] = 'M'
#name1[2][0]的内存地址和name2[2][0]内存地址是一样的
>>> print(name1,id(name1),id(name1[2][0]))
['h', 'b', ['M', 'n'], 'c'] 50209800 13820904
>>> print(name2,id(name2),id(name2[2][0]))
['a', 'b', ['M', 'n'], 'c'] 50891144 13820904

浅拷贝的三种表现形式:

1.用copy模块中的copy方法(跟上面的一样)

2.用切片的方式:

>>> name1 = ['a','b',['m','n'],'c']
>>> name2 = name1[:]

 3.用列表自带的方法:

>>> name1 = ['a','b',['m','n'],'c']
>>> name2 = name1.copy()

深拷贝(deepcopy)

深拷贝是指在内存中将所有的数据重新创建一份。

注:排除最后一层,即python内部对字符串和数字的优化

>>> import copy
>>> name1 = ['a','b',['m','n'],'c']
#深拷贝
>>> name2 = copy.deepcopy(name1)
>>> print(name1,',',id(name1))
['a', 'b', ['m', 'n'], 'c'] , 50142472
>>> print(name2,',',id(name2))
['a', 'b', ['m', 'n'], 'c'] , 50942280
>>> name1[0] = 'h'
>>> name1[2][0] = 'M'
>>> print(name1,id(name1),id(name1[2][0]))
['h', 'b', ['M', 'n'], 'c'] 50142472 10937320
>>> print(name2,id(name2),id(name2[2][0]))
['a', 'b', ['m', 'n'], 'c'] 50942280 4896280

 如图所示:

Python字典深浅拷贝与循环方式方法详解

 注:因为深拷贝会拷贝到最后一层的内存地址,所以最后一层的内存地址是不通

二、循环方式

方法1、

for key in info:
  print(key,info[key])

 方法2、

for k,v in info.items(): #会先把dict转成list,数据量大时莫用
  print(k,v)

 小结:

①方法1的效率比方法2的效率高很多

②方法1是直接通过key取value

③方法2是先把字典转换成一个列表,再去取值

④当数据量比较大的时候,用第二种方法时,字典转换成列表的这个过程需要花大量的时间老转换,当然数据量不大,没有关系,效率差不多

字典常用方法

Python字典深浅拷贝与循环方式方法详解

更多关于Python字典深浅拷贝与循环方式方法请查看下面的相关链接

Python 相关文章推荐
python错误处理详解
Sep 28 Python
python字典的常用操作方法小结
May 16 Python
rabbitmq(中间消息代理)在python中的使用详解
Dec 14 Python
PyQt5每天必学之创建窗口居中效果
Apr 19 Python
解决安装pycharm后不能执行python脚本的问题
Jan 19 Python
使用Python自动生成HTML的方法示例
Aug 06 Python
Django连接数据库并实现读写分离过程解析
Nov 13 Python
TensorFlow实现保存训练模型为pd文件并恢复
Feb 06 Python
浅谈Python的方法解析顺序(MRO)
Mar 05 Python
如何快速理解python的垃圾回收机制
Sep 01 Python
基于python的matplotlib制作双Y轴图
Apr 20 Python
用Python创建简易网站图文教程
Jun 11 Python
Python文件操作方法详解
Feb 09 #Python
Python列表操作方法详解
Feb 09 #Python
Python2与Python3的区别详解
Feb 09 #Python
python默认参数调用方法解析
Feb 09 #Python
Python集合操作方法详解
Feb 09 #Python
Python字符编码转码之GBK,UTF8互转
Feb 09 #Python
Python基础之字符串操作常用函数集合
Feb 09 #Python
You might like
通过php修改xml文档内容的方法
2015/01/23 PHP
PHP异常类及异常处理操作实例详解
2018/12/19 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
Javascript日期对象的dateAdd与dateDiff方法
2008/11/18 Javascript
Javascript 函数parseInt()转换时出现bug问题
2014/05/20 Javascript
json+jQuery实现的无限级树形菜单效果代码
2015/08/27 Javascript
JavaScript中的Function函数
2015/08/27 Javascript
JS中定位 position 的使用实例代码
2017/08/06 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
2017/08/09 jQuery
解读ES6中class关键字
2017/11/20 Javascript
vue实现条件叠加搜索的解决方法
2019/05/28 Javascript
微信小程序全局变量GLOBALDATA的定义和调用过程解析
2019/09/23 Javascript
java和js实现的洗牌小程序
2019/09/30 Javascript
Node对CommonJS的模块规范
2019/11/06 Javascript
JavaScript实现简易计算器小功能
2020/10/22 Javascript
python 提取文件的小程序
2009/07/29 Python
Python脚本在Appium库上对移动应用实现自动化测试
2015/04/17 Python
TensorFlow索引与切片的实现方法
2019/11/20 Python
详解有关PyCharm安装库失败的问题的解决方法
2020/02/02 Python
Python tkinter模版代码实例
2020/02/05 Python
python十进制转二进制的详解
2020/02/07 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
2020/03/28 Python
基于django micro搭建网站实现加水印功能
2020/05/22 Python
Python为何不支持switch语句原理详解
2020/10/21 Python
如何基于Python pygame实现动画跑马灯
2020/11/18 Python
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
英国皇家邮政海外旗舰店:Royal Mail
2018/02/21 全球购物
Silk Therapeutics官网:清洁、抗衰老护肤品
2020/08/12 全球购物
毕业生求职找工作的自我评价范文
2013/11/27 职场文书
污染环境建议书
2015/09/14 职场文书
全家福照片寄语怎么写?
2019/04/02 职场文书
《围炉夜话》110句人生箴言,精辟有内涵,引人深思
2019/10/23 职场文书
写作之关于描写老人的好段摘抄
2019/11/14 职场文书
读后感怎么写?书写读后感的基本技巧!
2019/12/10 职场文书
Linux系统下安装PHP7.3版本
2021/06/26 PHP
java objectUtils 使用可能会出现的问题
2022/02/28 Java/Android