Заполнение словаря 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'}

Таким образом, значение ключа может быть обновлено, и этоchangesпочему это не происходит в цикле FOR?

Ответы на вопрос(2)

Ваш ответ на вопрос