让我们考虑这个迭代列表的代码,同时每次迭代删除一个项目:
x = list(range(5))
for i in x:
print(i)
x.pop()
Run Code Online (Sandbox Code Playgroud)
它会打印出来0, 1, 2.由于前两次迭代删除了列表中的最后两个元素,因此仅打印前三个元素.
但是如果你在dict上尝试类似的东西:
y = {i: i for i in range(5)}
for i in y:
print(i)
y.pop(i)
Run Code Online (Sandbox Code Playgroud)
它将打印0,然后提升RuntimeError: dictionary changed size during iteration,因为我们正在迭代它时从字典中删除一个键.
当然,在迭代期间修改列表是不好的.但是为什么RuntimeError不像字典那样提出?这种行为有什么好的理由吗?