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)]
참고)
https://sogogi1000inbun.tistory.com/33
[python] 2차원 리스트를 생성하고 요소 변경하는 차이
BFS하면서 생성한 2차원 리스트의 요소가 이상하게 변경돼서 한창 고민했엇따. 바로 39,40 연산에서 값이 이상하게 삽입되는거다..!!! 처음에 리스트를 저렇게 선언했는데, 디버깅하면서 보니까, 0,
sogogi1000inbun.tistory.com
'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 |