리스트 원소 하나만 바꿨는데 원소 전체가 다 바꼈습니다. 왤까요..?


발생하는 문제 및 실행환경

[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]를 만들려고 이렇게 쓰니

myList = [[1] * 4] * 3

맨 앞에 값 하나만 바꿨는데 원소 전체 값이 바껴버렸습니다.

myList[0][0] = 5 #[[5, 1, 1, 1], [5, 1, 1, 1], [5, 1, 1, 1]]가 됨

왜 이렇게 된 건지 아시는분 있나요? ㅠㅠ?

  • 2016년 02월 12일에 작성됨

조회수 135


1 답변


좋아요
0
싫어요
채택취소하기

[1,1,1,1]을 x라고 두면, [x]*3[x, x, x]를 만들어 냅니다.

다른 말로 하면, [x]*3의 각 원소는 값만 같은 게 아니라 같은 객체란 소리지요.

myList = [[1] * 4] * 3

print(myList[1] is myList[2])
print(myList[1] is [1]*4)
print(myList[1] is [1,1,1,1])

결과 :

True
False
False

이 문제를 해결하려면

mylist = [[1]*4 for n in range(3)]

로 바꿔주시면 됩니다.

  • 2016년 02월 12일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close