【发布时间】:2016-07-19 04:18:36
【问题描述】:
当我执行下面的程序时,内存增加得非常快,所以我认为名为“secundary_function”的函数中使用的内存没有被释放。如果我复制我附加到列表的元素,或者如果我不使用secundary_function,问题就会消失。我想了解为什么这里需要复制以及为什么secundary_function 对使用的内存有影响..
import numpy as np
import time
def main_function(N):
liste_images = []
for i in range(N) :
images = np.zeros((3000,25,25))
time.sleep(0.05)
secundary_function(images)
liste_images.append(images[0])
def secundary_function(images):
conservee = np.arange(len(images))
images[conservee]
main_function(6000)
谢谢你的回答,对不起我的英语!
【问题讨论】:
-
看起来您正在生成一个 3000x25x25 的 3D 数组 6000 次。这是你的意图吗?
-
另请参阅此链接以释放内存:stackoverflow.com/questions/18310668/…
-
在原始程序中,图像每次都是不同的 3D 阵列,并且有一个测试选择我想保留在 liste_images 列表中的一些 25x25 2D 阵列。但在我看来,每次创建新的 3D 数组“图像”时,都应该释放内存。
-
您的代码有一些问题。您需要懂法语才能知道
main_function与fonction_principale相同。secondary_function的最后一行毫无意义。您正在用另一个数组索引一个数组? -
在 Python 中,变量实际上是指向对象的标签。只有在不再引用对象时,才能从内存中删除对象。也许您的原始程序保留了一些参考?
标签: python-3.x numpy memory-leaks