2차원 리스트 생성 후 요소 변경
본문 바로가기

Coding Test

2차원 리스트 생성 후 요소 변경

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]*4

하나의 정수형 객체 0을 생성하고, 배열의 각 요소들이 이를 가리킨다.

0이 4개가 아닌 1개만 생성되는 것이다.

[[0]*4]*4

첫번째 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

https://yechoi.tistory.com/52

'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