循环中的python gc.collect()

时间:2015-09-04 06:29:39

标签: python garbage-collection

任何人都可以解释为什么会这样吗?

>>> for i2 in range(10):
...     print i2
...     gc.collect()
...
0
0
1
0
2
0
3
0
4
0
5
0
6
0
7
0
8
0
9
0

1 个答案:

答案 0 :(得分:1)

gc.collect()的结果是number of unreachable objects

  

<强> gc.collect([generation])

  没有参数,运行完整集合。可选参数生成可以是指定要收集哪一代(从02)的整数。如果世代号无效,则会引发ValueError 返回找到的无法访问的对象数。

当您以交互方式将该程序输入Python时,所有这些调用的结果将由REPL(read-eval- print 循环)输出。这与您以交互方式将42+7输入Python时没有什么不同,尽管存在 no 指示您想要打印它(例如,使用49,它回显print 1}}来电)。

因此,您看到的输出是gc.collect()的所有归零值,散布在范围打印的“实际”输出中。

如果您将此作为真实的脚本运行,则只会看到数字0..9,因为不涉及REPL。或者你也可以通过对它做一些事情来防止输出返回值,例如:

>>> for i2 in range(4):
...     print i2
...     junk = gc.collect()
...
0
1
2
3