Python перезаписывает все предыдущие объекты словаря последним
Необходимо создать словарь из множеств, но при выполнение программы последнее полученное множество записывается во все предыдущие объекты
Вот код:
import random
a = set()
b ={}
for i in range(5):
for j in range(5):
x=random.randint(1,10)
a.add(x)
b[i]=a
print(b)
a.clear()
Вывод:
{0: {1, 2, 3, 7, 10}}
{0: {2, 1, 10, 3}, 1: {2, 1, 10, 3}}
{0: {3, 4, 7}, 1: {3, 4, 7}, 2: {3, 4, 7}}
{0: {8, 1, 2, 9}, 1: {8, 1, 2, 9}, 2: {8, 1, 2, 9}, 3: {8, 1, 2, 9}}
{0: {10, 3, 4, 6}, 1: {10, 3, 4, 6}, 2: {10, 3, 4, 6}, 3: {10, 3, 4, 6}, 4: {10, 3, 4, 6}}
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
a.clear()
Первое правило начинающего питониста: никогда (никогда-никогда) не используйте clear. Всегда создавайте новый объект. О чём бы речь не шла, о какой бы коллекции.
# a.clear()
a = set()
И тогда у вас не будет во всех элементах словаря ссылка на одно и то же множество, а будут разные множества, как это и должно быть.