1

可能重复:
带有生成器的 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,大多数低于一个父对象)。如果我关闭所有内容并重新启动,错误就会消失,但如果重新加载我的数据,它会再次出现。

我的想法是肯定发生了一些内存损坏,但我对它可能是什么感到困惑。有任何想法吗?

4

0 回答 0