Странное поведение dict.fromkeys (python)
Словарь который я создал при помощи dict.fromkeys работает не правильно, а словарь который я создал использовав {} работает верно. Причем эти два словаря одинаковые, исходя из d == d2.
В чем может быть проблема? Может это баг?
Тестировал на версии Python 3.8.6
d = dict.fromkeys(['3', '5', '4', '7'], [])
d2 = {'3': [], '5': [], '4': [], '7': []}
print(d)
print(d2)
print(d==d2) # True
d['3'].append('Сергей')
d2['3'].append('Сергей')
print(d)
print(d2)
Ответы (1 шт):
Автор решения: wchistow
→ Ссылка
Когда вы передали список ([]) методу dict.fromkeys(), он создал новый словарь, но каждому ключу этого словаря соответствует один и тот же список, который вы ему передали. А во втором случае вы создаёте такой же словарь, но в нём каждому ключу соответствуют разные списки. Доказательство:
Код:
d = dict.fromkeys(['3', '5', '4', '7'], [])
d2 = {'3': [], '5': [], '4': [], '7': []}
print('d:')
for v in d.values(): # Выводим ID значений словаря `d`
print(id(v))
print('d2:')
for v in d2.values(): # То же самое для `d2`
print(id(v))
Вывод:
d:
1804055070080 # (1)
1804055070080
1804055070080
1804055070080
d2:
1804054355584 # (2)
1804057678080
1804054325824
1804054726272
- Все ID - одинаковые (это значит, что в значениях словаря
dсодержаться ссылки на один и тот же список); - Здесь ID разные - значит, здесь содержаться разные списки.
PS: у вас числа в выводе будут другие.
