설명에서 일부 틀린 부분이 있을 수도 있겠으나, 아는 선에서 말씀드립니다.
일단 바뀌는 이유는 lst = [[0,0,0]]*4에서 내부의 리스트([0, 0, 0])는 값에 대해 전부 같은 주소를 참조하고 있습니다.
for i in range(4)했을 때, 각 lst[i]는 개별 리스트로 생각될 수 있겠으나 실은 같은 주소를 참조하고 있는 동일한 객체입니다. 따라서 하나의 주소를 가르키고 있는 [0,0,0]이라는 값에 값을 하나 바꿨으니(수정했으니) 나머지도 똑같이 바뀌는 겁니다.
따라서 질문자님께서 의도하신대로 구현을 하시려면 lst = [[0, 0, 0] for _ in range(4)]로 쓰셔야 의도하신대로 결과가 출력될 것입니다.
리스트의 얕은 복사, 깊은 복사에 대해 검색해보시면 제가 설명 드린 것보다 정확한 답변을 얻으 실 수 있으실 겁니다.
osh1795 2년 전
제가 문제를 풀다가 이해 안가는 부분이 있어 질문해봅니다.
맨 처음에 리스트에 요소를 리스트로 만들고
그 다음에 큰 리스트 내부의 작은 리스트 속 값들을 바꾸면 다른 위치에 있는 리스트들의 같은 위치들도 값이 같이 변하더라더구요.
(말로 설명하기가 어려워 소스코드 #질문 코드 아래의 출력값을 참고해주세요.)
이 원인을 알 수 있을까요?
그리고 이 문제를 해결하는 방법을 제가 나름 생각해봤는데 이 방법 말고도 다른 방법이 있나요??