Я работаю над проблемой раскраски графа. Прямо сейчас я застрял на шаге, который должен быть очень простым. Я создал словарь, который включает все возможные цвета для каждого узла (разные цвета представлены целыми числами 0, 1, 2, 3). Смотри ниже. (Заранее извиняюсь, если форматирование вопроса не получается правильно. Я впервые задаю вопрос здесь).
node_count = 4
colors = [0,1,2,3]
sol_dict = {node:colors for node in range(0,node_count)}
print(sol_dict)
Выход:
{0: [0, 1, 2, 3], 1: [0, 1, 2, 3], 2: [0, 1, 2, 3], 3: [0, 1, 2, 3]}
Все, что я хочу сделать, это удалить элементы из некоторых из этих списков, когда я применяю ограничение. Например, если мой алгоритм обнаруживает, что узел 1 в словаре не может принимать значение цвета 0, я хочу удалить 0 из списка, связанного с ключом словаря 1. Для этого я пишу:
sol_dict[1].remove(0)
print(sol_dict)
Выход:
{0: [1, 2, 3], 1: [1, 2, 3], 2: [1, 2, 3], 3: [1, 2, 3]}
Как видите, это удаляет 0 из всех элементов словаря. Я в недоумении, почему это происходит. Дайте мне знать, что вы думаете. Я застрял на этом некоторое время.
colors
каждый раз, вы получаете 4 ссылки на один и тот же объектcolors
.sol_dict = {node:colors.copy() for node in range(0,node_count)}
создает новый объект для каждой из ваших записей в словаре. - person Finn   schedule 07.01.2021