为什么这个小python代码会导致内存泄漏?

时间:2016-01-08 01:59:35

标签: python numpy memory-leaks

def fun():
    n = 300
    features = [[0 for i in range(0, n)] for j in range(0, n)]  
    for i in range(n):
        for j in range(i, n):
            features[i][j] = [np.random.random((300,300))]
    return

for i in range(10000):
    fun()

特征只是局部变量,应该在有趣的回归后收集。为什么会导致内存泄漏?

1 个答案:

答案 0 :(得分:3)

您的代码存储了300 * 300 * 300 * 300个浮点数。每个浮点数8个字节(numpy浮点数的默认值)超过64 GB。我怀疑这就是你遇到记忆问题的原因。

但这不是内存泄漏。你真的想制作4D野兽矩阵吗?如果您只想要300 x 300,看起来像np.random.random((300, 300))就可以了。见http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.random.random.html#numpy.random.random