탐색 문제를 풀다가 보면 그래프를 방문했는지 하지 않았는지 체크하는 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) ]