-
[Python][자료구조] 2차원 배열 선언개발 이야기/Python 2024. 9. 9. 21:53
문제를 풀다보면 2차원 배열을 선언해야 할 일이 종종 있는데, 아이디어 자체는 어렵지 않다. 중요한건 [[]]에서 첫번째가 행을 결정한다는 것이다.
저번에 한번 아래와 같이 [0]을 곱하는 형식으로 선언했었다.
rows = 10 cols = 5 arr = [[0] * cols] * rows
1차원 배열에서는 문제가 없었지만. 위와 같이 선언하게 되면 아래와 같이 모든 행의 0열의 값이 변경된다!
arr[0][0] = 1 [[1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0]]
왜? 🙄
Python에서는 * 연산자를 이용해 배열을 선언하게 되면, 얕은 복사(shallow copy)가 진행된다
즉, 배열 내의 요소들이 동일 객체를 가르키게 되는 것이다.이를 해결하기 위해 아래와 같이 선언해야한다.
😎 해결법
2차원 배열을 제대로 선언하기 위해서는 아래와 같이 for문을 내부에 이용해서 선언해야한다.
rows = 10 cols = 5 arr = [[0 for j in range(cols)] for i in range(rows)]
위에서 올린 링크의 블로그를 통해 쉽게 내용을 정리할 수 있었다.
2차원 배열은 흔하게 사용하는 자료구조 중 하나임으로 관련 내용을 잘 익히고 있자!