遍历字典时用与不用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的区别的更多相关文章

  1. Lua中,泛型for循环遍历table时,ipairs和pairs的区别

    为了看出两者的区别,首先定义一个table: a={"Hello","World";a=1,b=2,z=3,x=10,y=20;"Good" ...

  2. Django模板遍历字典的方法

    使用Python + Django做Web开发时,有时需要在view中传递一个字典给模板(template),如何在模板中遍历字典呢? 下面介绍两种方法: views.py代码如下: dicts = ...

  3. sh_21_遍历字典的列表

    sh_21_遍历字典的列表 students = [ {"name": "阿土"}, {"name": "小美"} ] ...

  4. 遍历ArrayList时同时修改引发的问题

    看见一篇博客,没有写完整,于是增补了一下: 博客原文:http://www.cnblogs.com/alipayhutu/archive/2012/08/11/2634073.html 注:黄色字体为 ...

  5. C#遍历字典

    C#遍历字典 foreach (KeyValuePair<int, Color> kvp in dic) lst.Add(kvp.Value);

  6. php 中遍历数组时使用引用出现的问题

    今天在使用foreach遍历数组时发现,当使用&时会出现问题: $arr = array( array('id' => 100, 'error'=> 'aa'), array('i ...

  7. swift基本用法-for循环遍历,遍历字典,循环生成数组

    // Playground - noun: a place where people can play import UIKit //--------------------------------- ...

  8. python遍历字典元素

    a={'a':{'b':{'c':{'d':'e'}},'f':'g'},'h':'i'} def show(myMap): for str in myMap.keys(): secondDict=m ...

  9. 2018-08-03 中文代码示例之Python-如何遍历字典

    此系列之后将参考一些最常用功能的在线教程/示例程序, 进行示例代码的中文化改进. 欢迎推荐有代表性和实用性的教程, 篇幅小更佳. 谢谢. 参考Python - How to loop a dictio ...

随机推荐

  1. HTTP,TCP/IP,Socket

    HTTP:超文本传输协议,首先它是一个协议,并且是基于TCP/IP协议基础之上的应用层协议. TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,HTTP是应用层协议,主要解决如何包装数据. ...

  2. myeclipse web 包名保留字与servlet冲突

    包名不能取modify ..........等保留字 不能有数字

  3. 3.4.2内核下的I2C驱动

    1. 框架1.1 硬件协议简介1.2 驱动框架1.3 bus-drv-dev模型及写程序a. 设备的4种构建方法a.1 定义一个i2c_board_info, 里面有:名字, 设备地址 然后i2c_r ...

  4. javaweb学习总结十五(web开发的相关概念以及常用服务器介绍)

    一:java web开发的相关概念 1:web分为静态web和动态web 2:模拟web服务器 web页面如果想让外部网络访问,必须通过网络程序读取资源,流程: a:用户通过浏览器访问网络程序 b:网 ...

  5. [改善Java代码]使用静态内部类提高封装性

    建议38: 使用静态内部类提高封装性 Java中的嵌套类(Nested Class)分为两种:静态内部类(也叫静态嵌套类,Static Nested Class)和内部类(Inner Class).内 ...

  6. 关于Eclipse的Save时的自定义操作

    Eclipse中Save+S的时候会包含很多其他操作.例如代码格式化,自动导入或者删除jar包等等. 如果修改代码的时候不想让Eclipse做这些操作,有两种方法. 第一: 用一个文本编辑器打开这个文 ...

  7. Xcode磁盘空间大清理(转)

    Xcode磁盘空间大清理 我的设备是Macbook Air 13’ Mid 2011,128G SSD.最近开始有些存储压力了,用Clean My Mac清理一部分旧文件后,决定对Xcode动手. 移 ...

  8. web前端常用小函数汇总

    //去掉html标签 function delHtmlTag(str) { var title = str.replace(/<[^>]+>/g, "");// ...

  9. CDH离线安装之安装包下载地址

    cloudermanager安装包地址:http://archive.cloudera.com/cm5/cm/5/cloudera-manager-el6-cm5.3.0_x86_64.tar.gz, ...

  10. Agile.Net 组件式开发平台 - 内核管理组件

    敏捷开发体系   软件构件技术:所谓软件构件化,就是要让软件开发像机械制造工业一样,可以用各种标准和非标准的零件来进行组装.软件的构件化和集成技术的目标是:软件系统可以由不同厂商提供的,用不同语言开发 ...