这会释放Python中的内存吗?你知道吗
a = range(200)
a = []
或者我必须特别做del a
?你知道吗
SPORTS = ['cricket', 'football']
def handle(self, *args, **options):
logger = logging.getLogger('load_articles')
for sport in self.SPORTS:
logger.info('setting sport')
self.sport = sport
self.load_articles_in_mem() #this populates the array articles
obj, created = self.create_sport()
self.create_articles_for(obj)
self.articles = []
logger.info("Articles loaded in memory %s" % len(self.articles))
所以这里的文章从某个源加载到内存中,当我增加SPORTS
列表时,我会不断膨胀articles
列表。我所需要的一切都是空的。你知道吗
有没有更优雅的方法?你知道吗
它应该释放内存,因为没有对列表中where的对象的引用。但据我所知,Python解释器并不能保证这一点。你知道吗
我刚刚检查了Python2.6,并创建了
a = range(100000000)
,它消耗了700 MB
内存。然后a = []
它消耗额外的600 MB
总量1.3 GB of RAM
。然后del a
什么也没变。在我关闭Python控制台之后,内存被释放了。你知道吗对于python3.4,
range
不会创建任何列表,因此不会消耗太多内存。我运行了a = range(1000000000000)
,但内存消耗几乎没有变化。但是我运行了
a = [x for x in range(10000000)]
,它消耗了200 MB
,然后运行a = []
,内存被释放了。再次创建a = [x for x in range(10000000)]
,花费了200 MB,然后del a
释放了内存。你知道吗结论:
Py26不收集未使用的垃圾列表。Py27也是。(刚刚检查过)
Py34将垃圾收集未使用的列表并释放内存。你知道吗
附言
我在Python2.6中运行了与Python3.4相同的测试。结果和以前一样。记忆没有被释放。你知道吗
相关问题 更多 >
编程相关推荐