为什么Python在为dict而不是为list的迭代过程中强制更改大小?

Dee*_*ace 12 python

这个问题不是在迭代过程Dictionary更改大小的重复-代码在Py2中有效,而在Py3中无效。这个问题问为什么不对此强制执行list,而不是如何修复代码。

Python将愉快地执行

li = [1, 2, 3]
for n in li:
    if n % 2 == 0:
        li.remove(n)
Run Code Online (Sandbox Code Playgroud)

但是,如果我们尝试使用字典:

a = {1: '', 2: '', 3: ''}   
for n in a:                 
    if n % 2 == 0:          
        a.pop(n)
Run Code Online (Sandbox Code Playgroud)

我们得到

RuntimeError: dictionary changed size during iteration
Run Code Online (Sandbox Code Playgroud)

因为我假设这是实现细节,所以我会注意到这已经在CPython 3.7.0和3.4.2中进行了测试。