【发布时间】:2015-10-30 18:24:48
【问题描述】:
对于我的一生,我无法弄清楚为什么会发生以下情况:
x = 2
y = []
z = { "player" : 0, "name": "none", "fired": 0, "hits": 0, "misses": 0, "streak": 0, "longest streak": 0 }
def number_player(x, y, z):
for i in range(x):
y.append(z)
y[i]["player"] = (i + 1)
number_player(x, y, z)
print y
控制台返回这个:
[{'streak': 0, 'hits': 0, 'name': 'none', 'player': 2, 'misses': 0, 'longest streak': 0, 'fired': 0}, {'streak': 0, 'hits': 0, 'name': 'none', 'player': 2, 'misses': 0, 'longest streak': 0, 'fired': 0}]
简而言之,它会创建一个 { ..."player" : "2"... } 的键/值对两次。如果我在每个循环结束时请求打印,列表中第一个返回的字典包含一个 {..."player" : "1"...} 键/值对,如预期的那样。
对我来说更奇怪的是,如果我通过了:
x = 3
y = [{ "player" : 0, "name": "none", "fired": 0, "hits": 0, "misses": 0, "streak": 0, "longest streak": 0 }]
然后运行 for 循环,使其追加两个字典,循环在第一个上运行良好,然后复制最后两个的值。我认为这是原因和解决方案,尽管我对此太陌生,无法从问题中辨别出来。
非常感谢您帮助我了解为什么会发生这种情况。
谢谢
【问题讨论】:
-
您正在用对同一字典的引用填充
y。不要那样做。
标签: python list for-loop dictionary