ubuntu上的python2.7函数范围()内存泄漏

Posted

技术标签:

【中文标题】ubuntu上的python2.7函数范围()内存泄漏【英文标题】:python2.7 function range() memory leak on ubuntu 【发布时间】:2022-01-11 14:59:33 【问题描述】:

当我使用 range 函数时,它永远占用内存,即使我 del 并运行 gc.collect()

import gc
import time
a = range(int(1e8))
del a
gc.collect()
time.sleep(30)

我使用 htop 进行监控,发现它们永远占用了大量内存。它只发生在 ubuntu16.04 上(macos 不是)。 知道为什么会这样吗?

【问题讨论】:

在 python 2.7 range 创建一个列表(所以当你定义 a 时你分配了很多内存)。使用xrange 进行惰性迭代并避免分配0 到1e8 之间的整数列表。 Python 3 将 range 替换为始终表现得像 xrange @GPhilo 我已经提到(以及在代码中)我已经删除了变量保持这个范围,所以这意味着我已经删除了这个列表。 CPython 在内部释放内存,但不会将其返回给操作系统。 【参考方案1】:

感谢@Klaus D. 的回答,我明白了。

Range 创建一个指针列表,每个指针指向一个对象。 Del "a" 将释放该列表并归还内存。它还包含所有 int 对象,但这些小对象不会返回给操作系统,因为 python 自己管理小内存分配。

【讨论】:

以上是关于ubuntu上的python2.7函数范围()内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu 16 编译装python2.7

Ubuntu上安装TensorFlow(python2.7版)

Ubuntu安装Python2.7,nodejs

如何在 Ubuntu 20.04 中为 Python2.7 安装 pip

ubuntu下python2.7链接mysql

python2.7 + ubuntu14.4 + dlib19.7