【发布时间】: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 在内部释放内存,但不会将其返回给操作系统。
标签: python python-2.7 memory-leaks garbage-collection