✏️ 곱하기를 이용한 2차원 리스트

n,m = 2,2
a_list = [[-1]*m]*n
print(a_list)

 

a_list를 출력해보면 아래와 같이 확인할 수 있다.

a_list  : [[-1, -1], [-1, -1]]

 

 

여기서 원소 값을 변경해보자.

n,m = 2,2
a_list = [[-1]*m]*n
print(a_list)
a_list[0][0] = 1

a_list[0][0] = 1 은 [[-1, -1], [-1, -1]] 에서 0행 0열을 1로 변경하는 코드다.

다시 a_list를 출력해보자.

n,m = 2,2
a_list = [[-1]*m]*n
print(a_list)
a_list[0][0] = 1
print(a_list)

a_list를 출력해보면 아래와 같이 모든 행의 0열 값이 1로 변경된 것을 확인할 수 있다.

a_list : [[1, -1], [1, -1]]

 

왜일까

2차원 리스트 선언시 '곱셉'을 사용하면 '얕은 복사(shallow copy)'로 만들어진다.

따라서 '같은객체'로 곱하기한만큼 만들어진다는 말이다.

 

그렇다면 어떻게 2차원 배열을 선언할까?

'리스트 컴프리헨션'을 사용하면 된다.

n,m = 2,2
a_list = [[-1]*m for _ in range(n)] # 리스트 컴프리헨션 사용
print(a_list)
a_list[0][0] = 1
print(a_list) # 출력 : [[1, -1], [-1, -1]]

 

+ Recent posts