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는 왜 같은 객체로 인식되지 않고 독립적일까?
'Python' 카테고리의 다른 글
[python] list, 문자열 에서 특정 element 개수 찾기 (list.count() in python) (0) | 2019.08.12 |
---|---|
[python] list에서 중복 제거하기 (get unique from list in python) (0) | 2019.08.12 |
[python] 문자열에서 특정 문자 위치 찾는 방법 (str.find() in python) (0) | 2019.08.12 |
[python] for문, if문 한 줄로 코딩하기 (for and if in one line) (4) | 2019.08.09 |
[Python] sys.stdin (0) | 2019.08.05 |