【发布时间】:2012-03-17 00:17:26
【问题描述】:
... 每个 for 循环看起来都像是一个列表推导式。
代替:
for stuff in all_stuff:
do(stuff)
我在做(没有将列表分配给任何东西):
[ do(stuff) for stuff in all_stuff ]
这是list-comp how-to's 上的常见模式。 1) 好的,没什么大不了的吧?错了。 2) 这不能只是代码风格吗?超级错误。
1) 是的,那是错误的。正如 NiklasB 指出的那样,HowTos 的目的是建立一个新的列表。
2) 可能,但它并不明显和明确,所以最好不要使用它。
我没有记住那些操作指南主要是基于命令行的。在我的团队对我大喊大叫,想知道我到底为什么要建立大量列表然后放手之后,我突然想到我可能会引入一个与内存相关的重大错误。
所以这是我的问题。如果我要在一个非常长的运行过程中执行此操作,其中消耗了大量数据,这个“列表”会继续消耗我的内存直到放手吗?垃圾收集器何时会收回内存?在这个列表建立的范围之后丢失了?
我的猜测是肯定的,它会不断消耗我的记忆。我不知道 python 垃圾收集器是如何工作的,但我敢说这个列表将一直存在,直到在 all_stuff 上调用最后一个 next 之后。
编辑。
我的问题的本质是更清晰地传达了in this question(感谢 Niklas 的链接)
【问题讨论】: