궁금증 연구소

안녕하세요. 궁금증연구소입니다.

오늘 포스팅 주제는 "파이썬에서 2차원 배열 리스트 초기화는 리스트 컴프리헨션 이용"입니다.

 

파이썬에는 리스트컴프리헨션이라는 매우 유용한 문법이 있습니다.

 

예를 들어 row = 3, column = 4 인 모든 값이 0인 2차원 리스트 배열을 만들 때

 

array = [[0]*m for _ in range(n)]
 
이와 같이 배열을 만들수 있습니다.
결과
 
만약 아래와 같은 코드를 작성한다면 결과는 어떻게 될까요?
 
n = 3
m = 4

arry = [[0]*m for _ in range(n)]

arry[1][1] = 5

print(arry)

 

당연히 3*4의 0으로 가득 찬 2차원 배열이 만들어질 것입니다. 이중 [1][1]에 해당하는 값만 5로 바뀌겠지요.

 

결과2

 

 

 

그러나, 만약 이와 같이 리스트 컴프리헨션을 통해서 2차원 배열을 만들지 않았을 경우

 


n=3
m=4

array = [[0]*m]*n
print(array)

array[1][1] = 5
print(array)

위 코드의 결과는 어떻게 될까요?

 

결과3

이와 같이 배열 3곳의 인덱스 1번째 값이 모두 5로 변화합니다.

배열 내부의 3개의 리스트는 결국 같은 리스트를 가리키는 레퍼런스입니다.

 

즉, 2차원 리스트 초기화 시에는 반드시 리스트 컴프리헨션을 활용해야 합니다.

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading