20200806 -
引言
编写一个编写的时候,发现内存逐步占用越来越大;脚本的目的是利用循环生成大量的数值,然后利用生分成的数值来执行某个函数,大致上的函数伪码就是下面这个:
def some_compute(x):
pass
max_value = 0xffffffff
for i in range(max_value):
some_compute(i)
问题
相关的函数并没有什么占用内存的情况,而且其占用的内存应该在函数结束之后也该清理了。所以占用内存的问题就在于range
函数这里。之前我记得我也记录过这个问题。然后查找了相关的内容。
文章[1]中介绍,range
函数在使用过程中,会的确生成一个相应的数组(不过我当时看到的现象是内存是在逐步提升占用的。)而为了解决这个问题,可以使用xrange
函数,该函数不会生成一个列表,而是一个生成器,这也是我后来自己改的一个内容。
注意:python3中已经内部优化了range函数,该函数也会是一个生成器,而且python3中也舍弃了xrange[2]。
所以为了解决上述问题,应该使用xrange
函数来生成相应的列表。
def some_compute(x):
pass
max_value = 0xffffffff
for i in xrange(max_value):
some_compute(i)
参考文章
[1]python面试题:range与xrange的区别,使用range有什么风险
[2]简单说说range和xrange的区别