您的位置:首页 > 其它

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

2015-11-06 20:27 246 查看

遍历字典时用与不用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,全部遍历方式都不会增加内存的消耗。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: