如果我每次在下面的循环中检查id(A),我会看到它的不同(可能是由于不变性)。如果是,如果长时间运行包含赋值的循环,是否有可能内存不足?或者是一个更好的主意 del A在任何新任务之前?
A = 10
for count in range(1,<a very high number>):
A = count
答案 0 :(得分:1)
在python2.7上range
返回一个列表。我会更担心这个列表会导致你的内存问题。
如果你有一个长时间运行的函数,你只需要del
一个变量,并且你有一个非常大对象,你希望尽快释放它。你将永远不会有一个接近那么大的整数。例如,仅仅十个字节就足以存储一个大于可观察宇宙中原子数的整数。
如果分配给变量,那么如果前一个对象只有一个引用,那么它将自动被释放。例如
import weakref # module that doesn't keep objects in memory if it has the only reference
class A(object):
pass
a = A()
r = weakref.ref(a)
print(a is r())
a = 1
print(r() is None)
答案 1 :(得分:0)
在python 2.7中,range()
函数生成一个int
列表,并且(当然)将它全部存储在内存中,如果你有一个非常大的列表,理论上你可以用尽内存(尽管它应该非常大)。您应该使用xrange()
而不是生成迭代器,因此您在内存中一次只有一个int
。
在python 3中,默认情况下使用迭代器循环所有迭代,因此range()
函数的行为与python 2.7中的xrange()
完全相同