遍历字典时用与不用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. The method load(Class, Serializable) in the type HibernateTemplate is not applicable for the arguments (Class, int)

    引入别人的项目发现利用HibernateTemplate的load的方法报错了.错误提示为: The method load(Class, Serializable) in the type Hibe ...

  2. APK文件安装模拟器和ADB命令的使用

    1.安装APK文件到模拟器 Android手机使用的执行文件为APK格式,类似于Windows平台的exe文件.在Android模拟器中安装APK文件有多种方法,如果你是开发人员,可以通过Eclips ...

  3. Eclipse NDK 配置,无需安装Cygwin

    Eclipse NDK 配置,不用安装Cygwin 文章转自http://www.cnblogs.com/chenjiajin/archive/2012/04/12/2444188.html 一.关于 ...

  4. Delphi各个版本和发展历史(转)

    Delphi,是Windows平台下著名的快速应用程序开发工具(Rapid Application Development,简称RAD).它的前身,即是DOS时代盛行一时的“BorlandTurbo ...

  5. Microsoft.SharePoint.Security的问题

    请求“Microsoft.SharePoint.Security.SharePointPermission, Microsoft.SharePoint.Security, Version=12.0.0 ...

  6. Ajax中解析Json的两种方法详解

    eval();  //此方法不推荐 JSON.parse();  //推荐方法 一.两种方法的区别 我们先初始化一个json格式的对象: var jsonDate = '{ "name&qu ...

  7. 初识CSS3之媒体查询(2015年05月31日)

    一.什么是媒体查询 媒体查询是面向不同设备提供不同样式的一种实现方式,它可以为每种类型的用户提供最佳的体验,也是响应式设计的实现方式. 现今每天都有更多的手机和平板电脑问市.消费者能够拥有可想象到的各 ...

  8. Spring(3.2.3) - Beans(8): 基于 Annotation 的配置

    除了基于 XML 的配置外,Spring 也支持基于 Annotation 的配置.Spring 提供以下介个 Annotation 来标注 Spring Bean: @Component:标注一个普 ...

  9. ifndef/define/endif作用和用法

    问题:ifndef/define/endif”主要目的是防止头文件的重复包含和编译,偶只知道这个概念不懂的是怎么个用法,和为什么要用它~~高手请指点一下~~谢谢~~~!!! ------------- ...

  10. 补充:sql server 中的相关查询、case函数

    相关查询(在同一个表中) 相关查询类似子查询,但是又不同于子查询:子查询中的子条件可以单独查出数据,但是相关查询的子条件不能查处数据.(可以理解成C#中for的穷举法,第一个for走一个,第二个for ...