遍历字典时用与不用iter的区别
2015-11-06 20:27
246 查看
遍历字典时用与不用iter的区别
遍历字典的时候一般会用这三个方法:keys(),values(),items()同时,它们各自都有升级版的方法:iterkeys(),itervalues(),iteritems()
区别就是加了iter,获得的数据不是列表,而是一个生成器。
好处就是占用的内存会少很多。
今天通过memory_profiler工具来检查一下,到底占用的内存会不会减少,会减少多少?
测试的demo:
import random @profile def random_sort2(n): d={i+1:i+2 for i in range(n)} for i in d: print i break for i in d.keys(): print i break for i in d.values(): print i break for k,v in d.items(): print k,v break for i in d.iterkeys(): break for i in d.itervalues(): break for i in d.iteritems(): break if __name__ == "__main__": random_sort2(200000)
结果:
Line # Mem usage Increment Line Contents ================================================ 4 12.445 MiB 0.000 MiB @profile 5 def random_sort2(n): 6 # l=list(range(n)) 7 38.477 MiB 26.031 MiB d={i+1:i+2 for i in range(n)} 8 # for i in d.keys(): 9 # break 10 38.477 MiB 0.000 MiB for i in d: 11 38.480 MiB 0.004 MiB print i 12 38.480 MiB 0.000 MiB break 13 14 40.008 MiB 1.527 MiB for i in d.keys(): 15 40.008 MiB 0.000 MiB print i 16 40.008 MiB 0.000 MiB break 17 40.008 MiB 0.000 MiB for i in d.values(): 18 40.008 MiB 0.000 MiB print i 19 40.008 MiB 0.000 MiB break 20 49.680 MiB 9.672 MiB for k,v in d.items(): 21 49.684 MiB 0.004 MiB print k,v 22 49.684 MiB 0.000 MiB break 23 24 49.684 MiB 0.000 MiB for i in d.iterkeys(): 25 49.684 MiB 0.000 MiB break 26 49.684 MiB 0.000 MiB for i in d.itervalues(): 27 49.684 MiB 0.000 MiB break 28 49.684 MiB 0.000 MiB for i in d.iteritems(): 29 49.684 MiB 0.000 MiB break
通过keys和items都会增加内存的使用,而且keys会相对较少,items非常多。不知道为什么values不会增加内存。
直接遍历也不会增加内存(
for i in d)
而如果加入iter,全部遍历方式都不会增加内存的消耗。
相关文章推荐
- Android Handler学习笔记
- Mercurial 使用说明 -- 链接
- asp.net MVC4 @Html.DropDownList的使用
- 研究生如何做好科研和发表文章 ——张帅
- iOS 自己开发SDK必须要注意的几点
- 如何用doxygen生成cocos2d-x文档
- OC 第九天 内存管理
- js父窗口访问子窗口
- Unity3D GUI学习之GUILayout控件及使用
- sipXecs安装时配置IP地址
- Navicat 无法连接MySQL数据库
- 丑数humble number
- leetcode-Summary Ranges
- Jquery常用的功能
- Android TextView中插入图片
- 《剑指offer》——矩形覆盖
- 无法定位程序输入点 @Idwinsock@initialization$qqrv 于动态链接库 indy60.bpl 上。
- 基数排序
- StarUML官网地址 http://staruml.io/
- 统计给定整数的二进制表示中1的个数