遍历字典时用与不用iter的区别
遍历字典时用与不用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,全部遍历方式都不会增加内存的消耗。
遍历字典时用与不用iter的区别的更多相关文章
- Lua中,泛型for循环遍历table时,ipairs和pairs的区别
为了看出两者的区别,首先定义一个table: a={"Hello","World";a=1,b=2,z=3,x=10,y=20;"Good" ...
- Django模板遍历字典的方法
使用Python + Django做Web开发时,有时需要在view中传递一个字典给模板(template),如何在模板中遍历字典呢? 下面介绍两种方法: views.py代码如下: dicts = ...
- sh_21_遍历字典的列表
sh_21_遍历字典的列表 students = [ {"name": "阿土"}, {"name": "小美"} ] ...
- 遍历ArrayList时同时修改引发的问题
看见一篇博客,没有写完整,于是增补了一下: 博客原文:http://www.cnblogs.com/alipayhutu/archive/2012/08/11/2634073.html 注:黄色字体为 ...
- C#遍历字典
C#遍历字典 foreach (KeyValuePair<int, Color> kvp in dic) lst.Add(kvp.Value);
- php 中遍历数组时使用引用出现的问题
今天在使用foreach遍历数组时发现,当使用&时会出现问题: $arr = array( array('id' => 100, 'error'=> 'aa'), array('i ...
- swift基本用法-for循环遍历,遍历字典,循环生成数组
// Playground - noun: a place where people can play import UIKit //--------------------------------- ...
- python遍历字典元素
a={'a':{'b':{'c':{'d':'e'}},'f':'g'},'h':'i'} def show(myMap): for str in myMap.keys(): secondDict=m ...
- 2018-08-03 中文代码示例之Python-如何遍历字典
此系列之后将参考一些最常用功能的在线教程/示例程序, 进行示例代码的中文化改进. 欢迎推荐有代表性和实用性的教程, 篇幅小更佳. 谢谢. 参考Python - How to loop a dictio ...
随机推荐
- 配置hibernate出现的错误一
问题:2011-04-18 11:35:46,734 ERROR [org.hibernate.tool.hbm2ddl.SchemaUpdate] - could not complete sche ...
- HDU 1160 FatMouse's Speed (DP)
FatMouse's Speed Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Su ...
- 关于Eclipse的Save时的自定义操作
Eclipse中Save+S的时候会包含很多其他操作.例如代码格式化,自动导入或者删除jar包等等. 如果修改代码的时候不想让Eclipse做这些操作,有两种方法. 第一: 用一个文本编辑器打开这个文 ...
- poj 2942 点的双连通分量
思路: 对于该图,直接用建图貌似没法解,所以也很容易想到建补图,这样存在边的两个点就能再圆桌上做一起.也就将问题转化为对双连通分量中是否存在奇圈了. 我们将每次查询的边保存在stack中,当遇到关键点 ...
- 解决c#,wpf程序带环境安装包体积太大问题
在.net开发客户端的时候,一定会遇到用户没有安装.net环境的问题,特别是现在win7,win8,win10多系统并用的时间段,很多开发者使用的是4.5的目标环境,用户却是使用win7的系统,这样势 ...
- CSS3 伸缩布局盒模型记
CSS3 伸缩布局盒模型 CSS3引入的布局模式Flexbox布局,主要思想是让容器有能力让其子项目能够改变其宽度,高度,以最佳方式填充可用空间.Flex容器使用Flex项目可以自动放大与收缩,用来填 ...
- HTTP - Session 机制
HTTP 是种无状态的协议,即使用 HTTP 协议时,每次发送请求都会产生对应的新响应,协议本身不会保留之前一切的请求或响应报文的信息.这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把 HTT ...
- django 学习-2 模板
如何使用渲染模板的方法来显示内容. 1.创建一个项目dream django-admin.py startproject dream cd dream 再创建一个应用 python m ...
- 基于asp.net MVC 的服务器和客户端的交互(二)之获取Oauth 2.0认证权限
基本Web API的ASP.NET的Oauth2认证 增加Token额外字段 增加Scope授权字段 持久化Token 设计Token的时间间隔 刷新Token后失效老的Token 自定义验证[重启I ...
- 【Cocos2d入门教程一】Cocos2d-x环境搭建
在进行Cocos2d游戏开发前 我们先来配置一下环境,我们先来准备一下工具,我们所需要的工具分别为: 1.Cocos2d引擎 2.JDK 3.SDK 4.NDK 5.ANT 6.ADT 1.下载Coc ...