可能重复:
带有生成器的 Python 内置“全部”
我在 IPython 中遇到了以下可重现的行为:
def test(lst):
for val in (v is not None for v in lst):
print val
print all(v is not None for v in lst)
print
print [v is not None for v in lst]
print all([v is not None for v in lst])
print
print
for val in (v is None for v in lst):
print val
print all(v is None for v in lst)
print
print [v is None for v in lst]
print all([v is None for v in lst])
>>> test([1])
True
True
[True]
True
False
True
[False]
False
该错误最初出现在一个更大的算法中,但它减少到上述测试用例。
现在这个输出显然是错误的,但我不知道发生了什么。如果我在标准 python shell 中重复,它会给出预期的输出。
补充说明
第三组打印语句显示错误:
all(v is None for v in [1])
应该返回True,而不是 False。
IPython 运行时加载了很多对象(价值约 1.5GB,大多数低于一个父对象)。如果我关闭所有内容并重新启动,错误就会消失,但如果重新加载我的数据,它会再次出现。
我的想法是肯定发生了一些内存损坏,但我对它可能是什么感到困惑。有任何想法吗?