visited = [[False]*3]*3
print(visited)
visited[0][1]=True
print(visited)
결과:
[[False, False, False], [False, False, False], [False, False, False]]
[[True, False, False], [True, False, False], [True, False, False]]
한 값만 바껴야 하는데 해당하는 열의 모든 값이 바뀜
-> 원인: *연산자가 참조를 복사했기 때문
파이썬은 *연산자로 초기화 할 때 값을 각각 할당하는게 아니고 하나의 객체를 생성해 놓고 모두가 이를 가리키는 '얕은 복사'를 진행한다.
하나의 정수형 객체 0을 생성하고, 배열의 각 요소들이 이를 가리킨다.
0이 4개가 아닌 1개만 생성되는 것이다.
첫번째 1차원 배열이 생성되면 두번째-세번째-네번째 배열이 모두 처음 생성된 배열을 가리킨다.
-> 해결: list comprehension 로 리스트 생성
visited = [[False]*N for _ in range(N)]
참고)
'Coding Test' 카테고리의 다른 글
[백준] 2110번 공유기 설치 이분 탐색 (0) | 2024.05.16 |
---|---|
[SQL] 쿼리문 작성 코테 대비 (0) | 2024.05.10 |
[백준] 런타임에러 (0) | 2023.01.22 |
[백준] 시간초과 (0) | 2023.01.22 |
[백준] CLASS1 (0) | 2023.01.22 |