파이썬 레퍼런스 참조에 대한 질문입니다.

조회수 141회

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] 이렇게만 하니까 나중에 레퍼런스가 변경돼서 원하는대로 결과가 나오지 않더라고요.. 제가 시도한 방식으로 할 수 있는 방법이 있을까요??

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.