【发布时间】:2017-08-08 10:49:00
【问题描述】:
我有一个类,其中包含一个函数,我在其中构建和存储一个可能非常大的颠簸数组,我从 HDF5 文件中读取该数组。 (我将数组存储为类对象,这样当我从文件中读取各种 HDF5 数据集时,我可以使用列表理解而不是手动循环。)我想要同时返回和删除存储的数组(即干净在 return 语句之后占用内存)。
class MWE(object):
def __init__(self,*args):
pass
return
def example(self,**kwargs):
self.array = readLargeArrayFromHDF5File(...)
return self.array # And simultaneously clean up self.array?
我知道我可以稍后在我的脚本中使用 del MWE.array 之类的东西简单地删除数组,但是有没有什么方法可以自动清理而无需我记住这样做?
谢谢!
【问题讨论】:
-
我还在学习,所以可以使用一些说明如何/如果类对象在返回时被清理。 self.array 会从内存中清除吗? (因为 MWE 类仍然存在...)我只是想避免执行“array2 = MWE.example()”然后使用两倍的内存...
-
等等你为什么要返回一个数组然后立即删除它。你知道同一个对象被传递给调用者而不是它的副本吗?此外 del 正在删除对对象的引用,您不会节省任何实际内存。
-
@aim 哦,刚刚看到你的评论。所以这些是参考而不是副本。在 python 中复制对象时,您通常必须执行一些非常明确的操作,例如
list_A_copy = list(list_A)或dict_A_copy = {key:value for key,value in dict_A.items()} -
啊,好的——谢谢大家的澄清。 @GiannisSpiliopoulos - 所以如果我想做:“array2 = numpy.copy(MWE.example())”,我将如何从内存中删除 self.array? (但保持类完整,以便我可以在需要时提取其他属性......)
-
你可以使用 del 语句删除引用,然后强制执行显式垃圾回收
import gc然后gc.collect()
标签: python class memory return code-cleanup