dev/프로그래밍

파이썬 리스트 컴프리헨션 과 곱하기 연산

jeongsu 2021. 12. 22. 21:56
n = 2
g1 = [[0] * (n + 1)] * (n + 1)
g1[1][2] = 1
print(g1)
g2 = [[0 for _ in range(n + 1)] for _ in range(n + 1)]
g2[1][2] = 1
print(g2)

 

위의 코드에서 g1 과 g2가 어떻게 바뀔지 알겠나요?

 

g1과 g2 모두 2차원 배열을 만드는 것이고, 3*3 의 2차원 배열이 만들어집니다.

그러나 다음 g1[1][2] =1 , g2[1][2] =1 을 코드를 실행했을때 다른 결과값이 보여집니다.

코드실행결과

이유는 저 list * 연산은 새로운 list를 만드는 것이 아니고, 기존 리스트를 복사하기 때문에 실제로는 똑같은 리스트를 여러개 붙여 놓은것입니다.

그래서 g1[1][2] = 1 을 했지만,

모두 수정된 것을 확인하실수 있습니다.