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.7range
创建一个列表(所以当你定义 a
时你分配了很多内存)。使用xrange
进行惰性迭代并避免分配0 到1e8
之间的整数列表。 Python 3 将 range
替换为始终表现得像 xrange
。
@GPhilo 我已经提到(以及在代码中)我已经删除了变量保持这个范围,所以这意味着我已经删除了这个列表。
CPython 在内部释放内存,但不会将其返回给操作系统。
【参考方案1】:
感谢@Klaus D. 的回答,我明白了。
Range 创建一个指针列表,每个指针指向一个对象。 Del "a" 将释放该列表并归还内存。它还包含所有 int 对象,但这些小对象不会返回给操作系统,因为 python 自己管理小内存分配。
【讨论】:
以上是关于ubuntu上的python2.7函数范围()内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章
Ubuntu上安装TensorFlow(python2.7版)