dict的列表值在迭代过程中具有无限深度



这里有一个令人费解的问题。我有一个带列表值的dict。我对这个dict进行了两次迭代:第一次是正常迭代,然后是第二次迭代,在第二次循环中,我为迭代变量分配了一个索引。这最终修改了最后一个dict值,它变成了无限深度(3个点表示列表是无限深度(。

这里有一个简单的例子:

输入代码

a = {1 : [2], 3: [4]}                       
for i,j in a.items(): 
pass 
for i,j[0] in a.items(): 
pass
print(a)                                

输出

{1: [2], 3: [[...]]}

这是怎么发生的?

在第一次迭代结束时,j是字典中的最后一个值[3]

然后再次遍历字典,将j[0]设置为字典中的每个值。由于j指的是字典中的一个列表,因此您正在更改字典中的列表。更改的最终效果是j[0]是字典中的最后一个值:j本身。

如果您跳过第一次迭代,您将获得NameError,因为如果不首先定义j,就无法引用j[0];或者,您将对以前使用的变量j的某些不同列表进行更改。

最新更新