파이썬 레퍼런스 참조에 대한 질문입니다.
조회수 580회
https://www.acmicpc.net/problem/11724 이 문제를 풀어보려고 하고 있습니다. 노드와 엣지 정보를 받아서 연결요소의 수를 출력하는 문제인데 https://ratsgo.github.io/data%20structure&algorithm/2017/11/24/CC/ 여기에 나온 설명을 바탕으로 코딩을 했습니다. 우선 제가 시도한 코드입니다.
N, M = map(int, input().split()) # node, edge수
edges = [tuple(map(int, input().split())) for _ in range(M)] # edge 정보 받기.
N _sets = [0] + [{i} for i in range(1, N+1)] # 각각의 노드를 원소로 갖는 set의 배열 초기화.
for u, v in edges: # Edge 정보를 바탕으로
N_sets[u].update(N_sets[v]) # u와 v를 합쳐서 u update
N_sets[v].update(N_sets[u]) # v update
N_sets[v] = N_sets[u] # !!!!!! 다른 값 변경시 같이 update되도록..하고싶음....
result = set(map(tuple, N_sets[1:]))
print(len(result))
제가 하고싶었던 것은 각 step마다 모든 값들을 바꾸는 것이 아니라,
>>> a = [1, 2, 3]
>>> b = a
>>> b[0] = 9
>>> b
[9, 2, 3]
>>>a
[9, 2, 3]
이런식으로 하나의 값을 변경했을때 연결된 값들이 모두 그 값을 참조할 수 있게 만들려고 했습니다.
그런데 그냥 N_sets[v] = N_sets[u] 이렇게만 하니까 나중에 레퍼런스가 변경돼서 원하는대로 결과가 나오지 않더라고요.. 제가 시도한 방식으로 할 수 있는 방법이 있을까요??
댓글 입력