[mistake][python] 이중 리스트 초기화 시 복사관련 문제

Yujin Bae·2022년 1월 17일
0

탐색 문제를 풀다가 보면 그래프를 방문했는지 하지 않았는지 체크하는 visited 이중 배열을 만드는 경우가 많다.

visited를 초기화할 때 밑과 같은 방법으로 했더니 잘 동작하지 않았다.

visited = [[False]*3]*4

visited[1][2] = True

이때, visited를 출력해보면, 밑과 같다.

[[False, False, True], 
[False, False, True], 
[False, False, True], 
[False, False, True]]

바꾸려고 했던 (1,2)의 값만 바뀌지 않고, 모두 바뀌는 것이었다.

제대로 동작하도록 수정해보면 다음과 같다.

visited_ = [ [False]*3 for l in range(4) ]

visited_[1][2] = True
print(visited_)

이때, visited_를 출력해보면 원하는 대로 (1,2)만 수정된 것을 볼 수 있다.

[[False, False, False], 
[False, False, True], 
[False, False, False], 
[False, False, False]]

결론

리스트를 포함하는 리스트에 곱하기 연산자를 사용하면, 얕은 복사가 되어, 값 하나를 변경시 모두 변경된다. 따라서 초기화할 때에는 반드시 밑처럼 사용하자.

visited = [ [False]*3 for _ in range(4) ]
profile
안녕하세요

0개의 댓글