使用某些函数,我创建了一个包含数百万个项目的列表,并检查内存消耗
print ('Memory at start: {0} Mb'.format(memory_usage_psutil()))
my_list = people_list(1000000)
print ('Memory at end: {0} Mb'.format(memory_usage_psutil()))
我得到的是:
Memory at start: 100.90625 Mb
Memory at end: 403.8125 Mb
因此创建一个列表并将其保存在内存中大约需要 300Mb。
例如,我想使用 len()
计算 my_list
WITHOUT 的 PART 中的项目数量
count = 0
additional_list = my_list[0:500000]
for item in additional_list:
count += 1
if count == 499999:
print ('Memory in loop: {0} Mb'.format(memory_usage_psutil()))
结果让我很困惑。
Memory at start: 100.90625 Mb
Memory in loop: 403.6953125 Mb
Memory at end: 403.6953125 Mb
我预计创建额外的列表会增加 150Mb 的内存消耗,但它没有发生。你能解释一下为什么吗?我的意思是 id 不同
In [30]: id(my_list)
Out[30]: 2672641621704
In [31]: id(additional_list)
Out[31]: 2672642905864
相同的结果来自:
for item in my_list[0:500000]:
count += 1
if count == 499999:
print ('Memory in loop: {0} Mb'.format(memory_usage_psutil()))
最佳答案
确实,您的两个列表是不同的对象,并且在内存中具有不同的地址。但是,列表中的各个对象是相同的。使用切片基本上可以让您查看列表中的某些元素。
您可以通过以下方式确认::
>>> map(id, my_list)[0:500000] == map(id, additional_list)
关于 "for"循环中列表的Python内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38295731/