假设我有一段简单的代码:
for i in range(1000):
if i in [150, 300, 500, 750]:
print(i)
列表[150, 300, 500, 750]
是否在循环的每次迭代中都被创建?或者我可以假设解释器(比方说,CPython 2.7)足够聪明以优化它吗?
答案 0 :(得分:18)
您可以使用dis.dis
查看字节码。这是CPython 2.7.11的输出:
>>> x = [10, 60, 20, 66, 79, 5]
>>> sum(1 for i in x if 60 < i < 70)
1
因此,列表创建被优化为加载常量元组(字节22)。列表(在这种情况下实际上是一个元组)不会在每次迭代时重新创建。