Неправильное добавление элемента в список

Есть небольшой код:

from collections import defaultdict
basket = defaultdict(list)
item = dict.fromkeys(['id','cou'])


item['id'] = 3
item['cou'] = 12

basket[11324].append(item)

item['id'] = 11
item['cou'] = 26

basket[11324].append(item)
print(basket)

Но на выходе получается что добавляется два последних элемента:

defaultdict(<class 'list'>, {670142777: [{'id': 11, 'cou': 26}, {'id': 11, 'cou': 26}]})

Почему так происходит?


Ответы (1 шт):

Автор решения: insolor

При добавлении словаря в список вы добавляете ссылку на существующий объект, потом в этом же объекте меняете значения, и еще раз добавляете этот же словарь (точнее, ссылку на него) в список - поэтому в списке два раза отображается словарь с одинаковыми значениями.

Чтобы такое не происходило, создавайте каждый раз новый словарь:

from collections import defaultdict
basket = defaultdict(list)

item = {'id': 3, 'cou': 12}

basket[11324].append()

item = {'id': 11, 'cou': 26}

basket[11324].append(item)
print(basket)
→ Ссылка