python

파이썬 2차원 배열 초기화시 주의할점

ag2개발자 2022. 2. 11. 19:18

파이썬에서 2차원 배열을 초기화할 때

a=[0]*3
a[1]=1
print(a)  # [0,1,0]

다음과 같이 당연해 보이지만 2차원 배열의 경우

a=[[0]*3]*3
a[1][1]=1
print(a) # [[0, 1, 0], [0, 1, 0], [0, 1, 0]]

한 행을 객체로 인식하기 때문에 모든 행을 같은 객체로 바꿔버린다.

a=[[0]*3 for _ in range(3)]
print(a)    # [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
a[1][1]=1
print(a)    # [[0, 0, 0], [0, 1, 0], [0, 0, 0]]

다음과 같이 초기화해야 원하는 값만 변경할 수 있다.

a=[[0]*3]*3
a[1][1]=1
print(a) # [[0, 1, 0], [0, 1, 0], [0, 1, 0]]

a[2]=[2,2,2]
print(a) # [[0, 1, 0], [0, 1, 0], [2, 2, 2]]

a[1][1]=3
print(a) # [[0, 3, 0], [0, 3, 0], [2, 2, 2]]

하나의 인덱스를 [2,2,2]로 바꾸고 a[1][1]에 3을 넣으면 a[0]과 a[1]만 바뀌는 모습