遍历字典时用与不用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 ...
随机推荐
- H - 高桥和低桥
H - 高桥和低桥 Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%lld & %llu Submit Sta ...
- 结合源码看nginx-1.4.0之nginx事件驱动机制详解
目录 0. 摘要 1. nginx事件模块组织结构 2. nginx事件模块数据结构及类图 3. nginx事件模块运行机制 4. 练习:一个简单的事件驱动模块 5. 小结 6. 参考源码
- Android 高级UI设计笔记03:使用ListView实现左右滑动删除Item
1. 这里就是实现一个很简单的功能,使用ListView实现左右滑动删除Item: (1)当我们在ListView的某个Item,向左滑动显示一个删除按钮,用户点击按钮,即可以删除该项item,并且有 ...
- Android(java)学习笔记91:泛型接口的概述和使用
package cn.itcast_06; /* * 泛型接口:把泛型定义在接口上 */ public interface Inter<T> { public abstract void ...
- Windows环境下安装导入tornado
首先,一台安装并配置好了python,我的python版本的肯定是2.7,直接进入tornado的环节: 下载tornado的压缩包,我的下载地址为:https://codeload.github.c ...
- 钓鱼 贪心 end
#include<iostream> int m,n; int *p; int dis=0; int peo=0; int data[3][2]; int b[3][2]; int da[ ...
- 【Slickflow学习】.NET开源工作流介绍、下载(一)
第一次自己写博客文章,大家多多指教.写博客主要记录一下学习的过程,给初学者提供下参考,也留给自己做备忘. Slickflow .NET开源工作流-介绍 这里摘录Slickflow官网的介绍: Slic ...
- 解决c#,wpf程序带环境安装包体积太大问题
在.net开发客户端的时候,一定会遇到用户没有安装.net环境的问题,特别是现在win7,win8,win10多系统并用的时间段,很多开发者使用的是4.5的目标环境,用户却是使用win7的系统,这样势 ...
- 单击改变input的边框颜色
input边框变色 今天布局页面的时候发现设计稿多了一项要求,就是点击input框的时候要求框框变色,以前没有遇到过,平时很多时候都用的:hover这次想着一样吧,看了之后发现不是想要的效果,ho ...
- CSS3 box-flex属性和box-orient属性
比较有意思的是虽然目前没有浏览器支持box-flex,box-orient属性,但CSS3问世以来,这两个属性却一直很火.2014年阿里校招第5题要求使用CSS3中的功能实现三个矩形的布局,总的宽度为 ...