我确信这是一个关于python和垃圾收集的天真问题。
我有一个在内存中创建大型数据结构的函数,然后返回一个整数。
我希望在调用函数之后,数据结构使用的内存将被释放。
但是,如果我理解下面的资源调用正在做什么(感谢这个SO post),那似乎并非如此。每次调用该函数时,python使用的总内存似乎都会增加。 (我使用的是Python 2.7.1。)
import resource
import random
def r(n):
a = [random.randint(1,100) for i in range(1,n)]
return n # or sum(a)
resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
z=r(100000)
resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
z=r(100000)
resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
我得到的,例如:
81584128
84389888
85995520
为什么内存使用量不断增加?
谢谢!
答案 0 :(得分:0)
我认为这是因为每次调用该函数都会创建一个列表a。我会想到,只要函数退出列表就会被转储并释放已用过的空间,但可能情况并非如此,或者不会那么快。