Python

[Python] 2차원 배열(리스트) 초기화

슈퍼짱짱 2019. 8. 7. 13:31
반응형

python에서 2차원 이상의 배list를 초기화 할 땐

>>> n = 9

>>> arr = [[0]*n for _ in range(n)]

과 같이 해야한다.

 

그 이유는

만약, 

>>> arr = [[0]*n]*n

으로 초기화 할 경우 n개의 [0]*n은 모두 같은 객체로 인식되기 때문이다.

 

ex)

>>> arr = [[0]*n]*n
       print('\n'.join([' '.join([str(i) for i in row]) for row in arr]))


0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0

 

>>> arr[0][0] = "1"
       print('\n'.join([' '.join([str(i) for i in row]) for row in arr]))


1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0

 

arr[0][0] 하나만 1로 바꾸었지만 모든 행의 첫번째 값이 모두 1로 바뀌었다.

 


?) 

>>> arr = [0]*n

>>> arr[0] = 1

>>> arr

1 0 0 0 0 0 0 0 0

 

1차원 list는 왜 같은 객체로 인식되지 않고 독립적일까?

반응형