"for"循环中列表的Python内存

标签 python list memory

使用某些函数,我创建了一个包含数百万个项目的列表,并检查内存消耗

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 WITHOUTPART 中的项目数量

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/

相关文章:

python - 如何在具有重组文本的两个链接中具有相同的文本?

python - 将列表列表映射到 pandas 系列

python - 不可变容器内的可变类型

C# 使用 Lists 读取、写入和搜索文本文件行

c# - cpu/内存密集型任务的最佳(python)设置

c - 子进程死亡后,子进程中声明的所有指针都会被释放吗?

python - 在 scrapy 起始 url 中传递 Dict

python - 垂直或水平计数列表列表中的值 "in a row"

c - 在 ARM Cortex-R4 上运行无 MMU Linux

Python在JSON结构中获取 sibling