前言
- 生成器和列表都可以用于数据的存储,但是在处理大数据量的时候,列表会占用很多的内存资源,而生成器不会,所以在处理大数据量时,可以尽量使用生成器,减少内存开销。下面展示一下生成器和列表在处理大数据量时,所消耗的内存开销。
生成大数据时的列表内存开销
# 列表
# li = [i for i in range(1000000)]
# 避免程序运行完结束
input()
首先看一下不执行生成数据时内存的开销:

可以看到此时的内存开销是4.6M。接着我们生成100W的数据量看下内存开销
# 列表
li = [i for i in range(1000000)]
# 避免程序运行完结束
input()
我们可以看到用列表生成一百万数据时,内存的开销为45M,是之前内存消耗的近10倍

生成大数据时的生成器内存开销
# 生成器
li = (i for i in range(1000000))
# 避免程序运行完结束
input()
我们可以看到用生成器来生成一百万数据时,内存消耗是4.6M,和之前不生成数据时,消耗的内存资源是一样的。

总结
- 通过对比生成器和列表生成大数据量的数据时消耗的内存资源,我们可以清晰的看出,用生成器来生成大数据量的数据,生成器的资源消耗是列表的N倍,极大程度上较少了电脑的内存开销。
- 差生这种极大差异的原理是:列表是将所生成的数据全部存储在内存之中,所以暂用了极大的内存资源;而生成器内部不直接保存数据,只存储生成数据的规则(算法),只有在用next去获取数据时才会生成数据。
在处理大数据时,生成器相比列表能显著减少内存开销。列表会存储所有数据,消耗大量内存,而生成器仅保存生成规则,按需生成数据,从而节省资源。对于100万条数据,列表消耗约45M内存,而生成器保持在4.6M,证明了生成器在处理大数据时的优势。
738

被折叠的 条评论
为什么被折叠?



