*
3 for _ in range(3)]와 [[0] *
3] * 3의 차이점[[0] `*` 3 for _ in range(3)]
와
[[0] `*` 3] * 3
의 차이점은 리스트의 객체 참조 방식에 있음
*
3] * 3이 표현은 [[0, 0, 0]]라는 단일 리스트 객체를 생성하고,
이것을 3번 참조하는 리스트를 만듦
결과적으로 모든 행이 동일한 리스트 객체를 참조하게 되어,
하나의 행을 수정하면 다른 모든 행도 영향을 받음
tmp[0][0] = 1
을 실행하면 tmp는
[[1, 0, 0], [1, 0, 0], [1, 0, 0]]
*
3 for _ in range(3)]이 표현은 리스트 컴프리헨션을 사용하여
3개의 독립적인 리스트를 생성함
즉, 각각의 리스트가 별개의 객체
결과적으로 각 행을 개별적으로 수정할 수 있으며,
한 행을 변경해도 다른 행에는 영향을 주지 않음
tmp[0][0] = 1
을 실행하면
tmp는
[[1, 0, 0], [0, 0, 0], [0, 0, 0]]
결론적으로,
첫 번째 방법은 동일한 객체를 참조하는 행을 생성하고,
두 번째 방법은 각 행이 독립적인 객체가 되도록 생성