我正在尝试测量使用列表推导创建的列表与使用生成器表达式创建的列表之间的内存差异。
from memory_profiler import profile
@profile
def squares_using_generators():
for square in (x ** 2 for x in range(200000)):
if (square % 100000000 == 0):
print(square)
@profile
def squares_using_list_comprehensions():
from sys import getsizeof
l = [x ** 2 for x in range(200000)]
print('list size {}'.format(getsizeof(l)))
for square in l:
if(square % 100000000 == 0):
print(square)
if __name__=='__main__':
squares_using_generators()
squares_using_list_comprehensions()
上述程序的内存配置文件输出如下
squares_using_generators()
Line # Mem usage Increment Line Contents
================================================
4 37.9 MiB 0.0 MiB @profile
5 def squares_using_generators():
6 37.9 MiB 0.0 MiB for square in (x ** 2 for x in range(200000)):
7 37.9 MiB 0.0 MiB if (square % 100000000 == 0):
8 37.9 MiB 0.0 MiB print(square)
squares_using_list_comprehensions
Line # Mem usage Increment Line Contents
================================================
11 37.9 MiB 0.0 MiB @profile
12 def squares_using_list_comprehensions():
13 37.9 MiB 0.0 MiB from sys import getsizeof
14 45.1 MiB 7.2 MiB l = [x ** 2 for x in range(200000)]
15 45.1 MiB 0.0 MiB print('list size {}'.format(getsizeof(l)))
16 45.2 MiB 0.1 MiB for square in l:
17 45.2 MiB 0.0 MiB if(square % 100000000 == 0):
18 45.2 MiB 0.0 MiB print(square)
我的程序还会在squares_using_list_comprehensions
list size 1671792
我的问题是7.2MiB
中两种情况下的记忆差异。为什么不是1671792
字节