我在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,大部分都在一个父对象之下)。如果我关闭所有内容并重新启动,则错误消失,但如果重新加载数据则会再次出现。
我的想法是必须有一些内存腐败,但我很难过它会是什么。有什么想法吗?