我有一个超大的numpy数组,分配给它的内存再也不会释放。我只是演示我的情况,以便您自己查看问题。
分配给简单numpy数组的内存将在删除该变量后立即释放(如下面将其删除的内容):
import numpy as np
X = np.ones((40000, 40000))
X.nbytes
12800000000
del(X)
当我运行上面的代码时,所有12 GB内存将立即释放。但是如果嵌套了numpy数组,情况就会变得复杂:
import numpy as np
import random
foo = np.array([np.array([np.ones((256,)) for j in range(random.randint(100, 150))]) for i in range(40000)])
sum(f.nbytes for f in foo)
10240481280
del(foo)
现在,即使您明确运行gc.collect()
,也不会释放10 GB的内存。你们有什么线索吗?
PS :环境:Ubuntu + Python 2.7 + numpy 1.15.1