without haste but without rest

[python] [ [0] * n ] * m 과 [ [0] * n for _ in range(m) ] 의 차이 본문

ProgrammingLanguage/Python

[python] [ [0] * n ] * m 과 [ [0] * n for _ in range(m) ] 의 차이

JinungKim 2021. 4. 28. 23:04

코드가 틀린 곳이 없는데 왜 자꾸 출력이 에상과 다른가 하니 

[ [0] * n for _ in range(m) ] 이 아니라 [ [0] * n ] * m 형태로 자료구조를 선언 해두었다.

 

1. [ [0] * n for _ in range(m) ]

2. [ [0] * n ] * m

 

2번은 배열 안에 배열들을 선언하는 게 아니라 각각 배열들을 선언한다.

1번은 배열 안에 2차원 배열을 선언한다.

 

따라서 2번처럼 선언하고 2차원배열에 값을 넣으면 2차원 좌표가 아니라 모든 배열에 동시에 같은 값을 넣게 된다.

아래 코드를 실행 해보면 바로 감이 온다.

출력 해줄때 같은 것처럼 보이는데 전혀 다르다.

 

a = [[0] * 2] * 3
b = [[0] * 2 for _ in range(3)]

a[0][0] = 1
b[0][0] = 1

print(a)
print(b)

# 출력
[[1, 0], [1, 0], [1, 0]]
[[1, 0], [0, 0], [0, 0]]

 

Comments