gpt4 book ai didi

python-3.x - Python 占用的内存是应有的六倍

转载 作者:行者123 更新时间:2023-12-04 18:41:01 27 4
gpt4 key购买 nike

我使用下面的简单代码在 python 中生成了一个 numpy 数组。当我在控制台中打印出对象大小时,我得知该对象正在使用 228 MB 内存。但是当我查看我的实际 RAM 发生了什么时,我得到了一个非常不同的结果。在系统监视器的资源选项卡中,我可以看到生成此数组时内存使用量增加了 1.3 GB。为了确保它是由 python 引起的,我还查看了进程选项卡。那里也一样。进程“python3.5”在脚本需要完成的 10 秒内将其内存使用量增加到 1.3 GB。

这意味着 python 占用的内存几乎是该对象的六倍。我会理解管理对象的一定内存开销,但不会增加 6 倍。我没有找到一个可以理解的解释为什么我不能使用 python 来例如读入的文件,比我内存的六分之一大。

import sys
import numpy as np
scale = 30000000
vector1 = np.array([x for x in range(scale)])
# vector1 = np.array(list(range(scale))) # same thing here
print(((sys.getsizeof(vector1)/1024)/1024.0), 'MB')

感谢您对此提供任何可以理解的解释。

Edit: And for solutions to fix it.

最佳答案

我相信您可以使用 np.arange 来解决此问题功能。

vector1 = np.arange(scale)

当我通过将列表理解(即列表)传递给 np.array 来构建 numpy 数组时,我重现了相同的行为构造函数。问题是显然用作参数的列表没有被垃圾收集。我只能推测为什么。

tdelenay 的评论

该列表正在被删除,因为它的引用变为零。 Python 将内存返回到堆中,在创建新对象时可以使用它。堆不会立即将内存还给系统。这就是为什么进程内存使用率仍然很高的原因。

关于python-3.x - Python 占用的内存是应有的六倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40185951/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com