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) 通过正确添加
副本
,可以解决此问题;这与嵌套循环无关。这似乎是该链接中最简单的答案(以防任何人寻找相同的东西)。