개발 이야기/Python

[Python][자료구조] 2차원 배열 선언

혁진 2024. 9. 9. 21:53

https://blog.sysbot32.com/entry/Python-2%EC%B0%A8%EC%9B%90-%EB%B0%B0%EC%97%B4-%EC%84%A0%EC%96%B8%ED%95%98%EA%B8%B0

 

[Python] 2차원 배열 선언하기

※ 2021년 12월 19일에 작성된 글입니다.Python에서의 1차원 배열 선언Python에서 1차원 배열을 선언할 때는 다음과 같이 * 연산자를 이용해 간단하게 선언할 수 있다.rows = 10arr = [0] * rows[0, 0, 0, 0, 0, 0, 0

blog.sysbot32.com

 

문제를 풀다보면 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차원 배열은 흔하게 사용하는 자료구조 중 하나임으로 관련 내용을 잘 익히고 있자!