python - 为什么此 python 代码中的内存使用量增加?

标签 python memory-management garbage-collection

我确定这是一个关于 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

为什么内存使用量不断增加?

谢谢!

最佳答案

我认为这是因为每次调用该函数都会创建一个列表 a。我原以为一旦函数退出,列表就会被转储并释放使用的空间,但也许事实并非如此,或者不会发生那么快。

关于python - 为什么此 python 代码中的内存使用量增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16396619/

相关文章:

python - Python 中的 bool 变量模型

python - 寻找在 python 中从 yelp review 数据集构建矩阵的有效方法

c - 进程虚拟内存中的起始地址和结束地址

java - JVM 垃圾收集和分页内存架构

git - git在执行操作时会做什么:git gc-git prune

python - 如何避免 tkinter 的 IntVar.get() 在空白字符串上引发 TclError

python - 将函数及其参数传递给另一个函数

c++ - 从返回值 : how does it work? 创建 const 左值引用

c - C 中 'free' 的奇怪行为

java - JVM G1GC 的混合 gc 没有收集太多旧区域