리스트가 서로 영향을 안미치게 만들고 싶습니다.

조회수 411회
ex = [1]
EX = ex
EX[0] = ex[0] + 1

위와 같이 했을때 EX[0], ex[0] 둘다 2가 됩니다. 저는 EX[0] 은 2가 되지만 ex[0]은 1을 유지하게 만들고 싶습니다.

1 답변

  • exEX 모두 동일한 리스트 객체를 가리키고 때문에 발생하는 현상입니다.
    리스트 요소를 복제하여 새로운 리스트 객체를 생성하면 됩니다.

    보통 두 가지 방식을 많이 이용합니다.

    copy 메서드를 이용하는 방법

    EX = ex.copy()
    

    슬라이싱을 이용하는 방법

    EX = ex[:]
    

    만약 리스트 내부에 다른 뮤터블 타입의 객체를 포함한 경우에는 deepcopy 가 필요할 수도 있습니다.
    deepcopy는 리스트 내부의 모든 요소들을 재귀적으로 복사합니다.

    import copy
    
    a = [[1, 2], [3, 4]]
    b = a.copy()
    c = copy.deepcopy(a)
    
    a[0][0] = 0
    
    print(a)  # [[0, 2], [3, 4]]
    print(b)  # [[0, 2], [3, 4]]
    print(c)  # [[1, 2], [3, 4]]
    

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

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)