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

조회수 1418회

발생하는 문제 및 실행환경

[[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]]가 됨

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

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)]
    

    로 바꿔주시면 됩니다.

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.