250203 학습(복습완료)

송용진·약 18시간 전
0

[[0] * 3 for _ in range(3)]와 [[0] * 3] * 3의 차이점

[[0] `*` 3 for _ in range(3)]

[[0] `*` 3] * 3

의 차이점은 리스트의 객체 참조 방식에 있음

[[0] * 3] * 3

이 표현은 [[0, 0, 0]]라는 단일 리스트 객체를 생성하고,
이것을 3번 참조하는 리스트를 만듦
결과적으로 모든 행이 동일한 리스트 객체를 참조하게 되어,
하나의 행을 수정하면 다른 모든 행도 영향을 받음

예시

tmp[0][0] = 1

을 실행하면 tmp는

[[1, 0, 0], [1, 0, 0], [1, 0, 0]]

[[0] * 3 for _ in range(3)]

이 표현은 리스트 컴프리헨션을 사용하여
3개의 독립적인 리스트를 생성함
즉, 각각의 리스트가 별개의 객체

결과적으로 각 행을 개별적으로 수정할 수 있으며,
한 행을 변경해도 다른 행에는 영향을 주지 않음

예시

tmp[0][0] = 1

을 실행하면
tmp는

[[1, 0, 0], [0, 0, 0], [0, 0, 0]]

결론

결론적으로,
첫 번째 방법은 동일한 객체를 참조하는 행을 생성하고,
두 번째 방법은 각 행이 독립적인 객체가 되도록 생성

profile
백엔드 개발자

0개의 댓글