Python 如果在嵌套循环中,数组中的项不会正确更新
我有以下示例代码:Python 如果在嵌套循环中,数组中的项不会正确更新,python,python-3.6,Python,Python 3.6,我有以下示例代码: recs = [] for x in range(1,3): rec = { 'A': x } recs.append(rec) print(rec) for y in range(1, 3): rec['B'] = y recs.append(rec) print(rec) print('----- Array after exiting loops') for r i
recs = []
for x in range(1,3):
rec = {
'A': x
}
recs.append(rec)
print(rec)
for y in range(1, 3):
rec['B'] = y
recs.append(rec)
print(rec)
print('----- Array after exiting loops')
for r in recs:
print(r)
这将提供以下输出:
{'A': 1}
{'A': 1, 'B': 1}
{'A': 1, 'B': 2}
{'A': 2}
{'A': 2, 'B': 1}
{'A': 2, 'B': 2}
----- Array after exiting loops
{'A': 1, 'B': 2}
{'A': 1, 'B': 2}
{'A': 1, 'B': 2}
{'A': 2, 'B': 2}
{'A': 2, 'B': 2}
{'A': 2, 'B': 2}
现在,我可以用以下代码解决此问题:
for y in range(1, 3):
rec2 = rec.copy()
rec2['B'] = y
recs.append(rec2)
print(rec2)
我想要解释的是,当您进入嵌套循环时,为什么会发生这种行为 在外部
x
循环中,您正在使用=
语法创建一个新对象。此循环只运行两次,因此最终只有两个对象。对于通过内部y
循环的每次运行,您只需修改前两个对象中的一个
每次更新rec['B']
,都会覆盖以前对对象所做的更改。当您将rec
附加到rec
时,您并不是在创建一个新对象,您只是告诉列表包含对同一rec
对象的另一个引用
如果您在
y
循环中打印rec
,而不是只打印rec
,您可以实时看到这种情况。(1)您正在处理列表;程序中没有数组。(2) 通过正确添加副本
,可以解决此问题;这与嵌套循环无关。这似乎是该链接中最简单的答案(以防任何人寻找相同的东西)。