Заполнение словаря python в цикле возвращает те же значения
Для нужд проекта перебираю некоторые данные и добавляю нужные значения в готовый словарь.
Вот урезанный пример кода, который представляет мой вопрос:
class Parser:
def __init__(self):
self.records = [['value1','value2','value3'],
['value4','value5','value6'],
['value7','value8','value9']]
def get_parsed(self):
parsed = []
dic = {'key1': '',
'key2': '',
'key3': '',
}
for i in self.records:
dic['key1'] = i[0]
dic['key2'] = i[1]
dic['key3'] = i[2]
parsed.append(dic)
return parsed
То, что я ожидаю получить, это список таких слов:
[{'key1':'value1','key2':'value2','key3':'value3'},
{'key1':'value4','key2':'value5','key3':'value6'},
{'key1':'value7','key2':'value8','key3':'value9'}]
Но то, что я получаю, это:
[{'key1':'value1','key2':'value2','key3':'value3'},
{'key1':'value1','key2':'value2','key3':'value3'},
{'key1':'value1','key2':'value2','key3':'value3'}]
Хотя, если я перенесу инициализацию словаря в 'за' цикл - я получаю желаемый результат, но я нене понимаю, почему это происходит?
РЕДАКТИРОВАТЬ: вопрос большеПочему так происходит? Я провел некоторое тестирование в ipython, и эточто яу нас есть:
In [1]: d = {'a':'','b':'','c':''}
In [2]: d
Out[2]: {'a': '', 'b': '', 'c': ''}
In [3]: d['a'] = 'value'
In [4]: d['b'] = 'other_value'
In [5]: d['c'] = 'third_value'
In [6]: d
Out[6]: {'a': 'value', 'b': 'other_value', 'c': 'third_value'}
In [7]: d['a'] = 'inserting new value'
In [8]: d
Out[8]: {'a': 'inserting new value', 'b': 'other_value', 'c': 'third_value'}
Таким образом, значение ключа может быть обновлено, и этоизмененияпочему неэто происходит в цикле FOR?