python gc.collect() 在循环中

标签 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

最佳答案

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

gc.collect([generation])

With no arguments, run a full collection. The optional argument generation may be an integer specifying which generation to collect (from 0 to 2). A ValueError is raised if the generation number is invalid. The number of unreachable objects found is returned.

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

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

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

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

关于python gc.collect() 在循环中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32391461/

相关文章:

java - OutOfMemoryError 和 GC 开销限制在 maven 但不是 eclipse

python - 我可以打包 IPython Notebook、依赖项和其他模块吗?

Python与调度计算

java - 垃圾收集和不完整的构造对象

Python 对象没有引用者但仍可通过弱引用访问?

Python 程序占用 RAM

python - 如何强制用户选择至少一个复选按钮

python - 为什么 Python 运行 C++ 函数比 C++ 通过其 main() 函数运行自己的函数更快?

python - pandas 数据框中的值之间的比较

java - 为什么我们必须手动清除 PhantomReference?