bfinecpa   2년 전

lst[1]에만 append되어야 하는데 모든 리스트에서 append 됩니다 왜 그런지 알 수 있을까요?

superkim0610   2년 전

리스트를 

lst=[[0]]*51

을 통해 초기화 하셨는데, 이렇게 초기화를 하시면 모든 요소가 '얕은 복사'를 통하여

>>> id(lst[0])
2356049362112
>>> id(lst[1])
2356049362112
>>> id(lst[2]) 2356049362112

모두 같은 메모리 주소를 가지게 되고 모든 요소가 같은 값을 가지게 되므로 1번째 index에 값을 바꾸셔도 메모리 주소가 같기 때문에 모든 요소가 바뀌게 됩니다.

따라서 

>>> lst = [[0] for i in range(51)]
>>> lst[1].append('cl')
>>> lst
[[0], [0, 'cl'], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]]

와 같은 방법으로 초기화 및 선언을 하신다면 원하시는 방법으로 구현 가능하게 됩니다.

bfinecpa   2년 전

정말 감사합니다.

댓글을 작성하려면 로그인해야 합니다.