Для жизни меня я не могу понять, почему происходит следующее:Для перебираем словарей в списке (Python 2.7.6)
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}]
Таким образом, в short, он создает пару ключей/значений {... "player": "2" ...} дважды. Если я запрошу печать в конце каждого цикла, первый возвращаемый словарь в списке содержит пару пар {... "player": "1" ...} ключей/значений, как ожидалось.
Незнакомец мне еще в том, что если я прохожу:
x = 3
y = [{ "player" : 0, "name": "none", "fired": 0, "hits": 0, "misses": 0, "streak": 0, "longest streak": 0 }]
затем запустить цикл так, он добавляет еще два словаря, цикл работает отлично над первым, затем дублирует значения двух последних. Я предполагаю, что здесь лежит причина и решимость, хотя я слишком новичок в этом, чтобы понять их из проблемы.
Ваша помощь в том, чтобы понять, почему это происходит, было бы весьма полезно.
Спасибо
Вы заполняете 'y' ** ссылками на тот же словарь **. Не делай этого. – jonrsharpe