遍历字典时用与不用iter的区别

遍历字典的时候一般会用这三个方法:keys(),values(),items()

同时,它们各自都有升级版的方法:iterkeys(),itervalues(),iteritems()

区别就是加了iter,获得的数据不是列表,而是一个生成器。

好处就是占用的内存会少很多。

今天通过memory_profiler工具来检查一下,到底占用的内存会不会减少,会减少多少?

测试的demo:

  1. import random
  2. @profile
  3. def random_sort2(n):
  4. d={i+1:i+2 for i in range(n)}
  5. for i in d:
  6. print i
  7. break
  8. for i in d.keys():
  9. print i
  10. break
  11. for i in d.values():
  12. print i
  13. break
  14. for k,v in d.items():
  15. print k,v
  16. break
  17. for i in d.iterkeys():
  18. break
  19. for i in d.itervalues():
  20. break
  21. for i in d.iteritems():
  22. break
  23. if __name__ == "__main__":
  24. random_sort2(200000)

结果:

  1. Line # Mem usage Increment Line Contents
  2. ================================================
  3. 4 12.445 MiB 0.000 MiB @profile
  4. 5 def random_sort2(n):
  5. 6 # l=list(range(n))
  6. 7 38.477 MiB 26.031 MiB d={i+1:i+2 for i in range(n)}
  7. 8 # for i in d.keys():
  8. 9 # break
  9. 10 38.477 MiB 0.000 MiB for i in d:
  10. 11 38.480 MiB 0.004 MiB print i
  11. 12 38.480 MiB 0.000 MiB break
  12. 13
  13. 14 40.008 MiB 1.527 MiB for i in d.keys():
  14. 15 40.008 MiB 0.000 MiB print i
  15. 16 40.008 MiB 0.000 MiB break
  16. 17 40.008 MiB 0.000 MiB for i in d.values():
  17. 18 40.008 MiB 0.000 MiB print i
  18. 19 40.008 MiB 0.000 MiB break
  19. 20 49.680 MiB 9.672 MiB for k,v in d.items():
  20. 21 49.684 MiB 0.004 MiB print k,v
  21. 22 49.684 MiB 0.000 MiB break
  22. 23
  23. 24 49.684 MiB 0.000 MiB for i in d.iterkeys():
  24. 25 49.684 MiB 0.000 MiB break
  25. 26 49.684 MiB 0.000 MiB for i in d.itervalues():
  26. 27 49.684 MiB 0.000 MiB break
  27. 28 49.684 MiB 0.000 MiB for i in d.iteritems():
  28. 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. H - 高桥和低桥

    H - 高桥和低桥 Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu Submit Sta ...

  2. 结合源码看nginx-1.4.0之nginx事件驱动机制详解

    目录 0. 摘要 1. nginx事件模块组织结构 2. nginx事件模块数据结构及类图 3. nginx事件模块运行机制 4. 练习:一个简单的事件驱动模块 5. 小结 6. 参考源码

  3. Android 高级UI设计笔记03:使用ListView实现左右滑动删除Item

    1. 这里就是实现一个很简单的功能,使用ListView实现左右滑动删除Item: (1)当我们在ListView的某个Item,向左滑动显示一个删除按钮,用户点击按钮,即可以删除该项item,并且有 ...

  4. Android(java)学习笔记91:泛型接口的概述和使用

    package cn.itcast_06; /* * 泛型接口:把泛型定义在接口上 */ public interface Inter<T> { public abstract void ...

  5. Windows环境下安装导入tornado

    首先,一台安装并配置好了python,我的python版本的肯定是2.7,直接进入tornado的环节: 下载tornado的压缩包,我的下载地址为:https://codeload.github.c ...

  6. 钓鱼 贪心 end

    #include<iostream> int m,n; int *p; int dis=0; int peo=0; int data[3][2]; int b[3][2]; int da[ ...

  7. 【Slickflow学习】.NET开源工作流介绍、下载(一)

    第一次自己写博客文章,大家多多指教.写博客主要记录一下学习的过程,给初学者提供下参考,也留给自己做备忘. Slickflow .NET开源工作流-介绍 这里摘录Slickflow官网的介绍: Slic ...

  8. 解决c#,wpf程序带环境安装包体积太大问题

    在.net开发客户端的时候,一定会遇到用户没有安装.net环境的问题,特别是现在win7,win8,win10多系统并用的时间段,很多开发者使用的是4.5的目标环境,用户却是使用win7的系统,这样势 ...

  9. 单击改变input的边框颜色

    input边框变色   今天布局页面的时候发现设计稿多了一项要求,就是点击input框的时候要求框框变色,以前没有遇到过,平时很多时候都用的:hover这次想着一样吧,看了之后发现不是想要的效果,ho ...

  10. CSS3 box-flex属性和box-orient属性

    比较有意思的是虽然目前没有浏览器支持box-flex,box-orient属性,但CSS3问世以来,这两个属性却一直很火.2014年阿里校招第5题要求使用CSS3中的功能实现三个矩形的布局,总的宽度为 ...