这里有一个令人费解的问题。我有一个带列表值的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
的某些不同列表进行更改。