리스트 원소 하나만 바꿨는데 원소 전체가 다 바꼈습니다. 왤까요..?
조회수 2008회
발생하는 문제 및 실행환경
[[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 답변
-
[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)]
로 바꿔주시면 됩니다.
댓글 입력