什么可能导致此生成器表达式被破坏?

时间:2013-01-03 03:54:32

标签: python ipython

  

可能重复:
  Python builtin “all” with generators

我在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,大部分都在一个父对象之下)。如果我关闭所有内容并重新启动,则错误消失,但如果重新加载数据则会再次出现。

我的想法是必须有一些内存腐败,但我很难过它会是什么。有什么想法吗?

0 个答案:

没有答案