[Python] 2차원 배열(리스트) 초기화
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는 왜 같은 객체로 인식되지 않고 독립적일까?