파이썬 리스트를 복사하려면 어떻게 해야 되나요?

조회수 23683회

밑의 소스에서 그냥 대입해버리니까 list1이 바뀌면 list2도 따라서 바뀌더라고요 저는 list2가 계속 [1,2,3]이어야 하거든요

for문 돌려서 일일이 카피하기는 싫은데 파이썬 기능 있으면 좀 알려주세요

소스코드

list1 = [1,2,3]
list2 = list1

list1.append(4)

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    리스트를 복사하는데에는 다양한 방법이 있습니다.

    1. slice

    list2 = list1[:]

    2. list()

    list2 = list(list1)

    3. copy

    import copy list2 = copy.copy(list1)

    4.deepcopy

    import copy list2 = copy.deepcopy(list1)

    각 방법마다 조금씩 차이가 있습니다. 예제를 통해서 알려드릴게요

    예제

    import copy
    
    list1 = ["list1"]
    list2 = ["list2"]
    list1.append(list2)
    
    print "원래 list1:",list1
    
    result1 = list1[:]
    result2 = list(list1)
    result3 = copy.copy(list1)
    result4 = copy.deepcopy(list1)
    
    print "\n붙인 결과 : "
    print "list1[:]\t\t\t\t", result1
    print "list(list1)\t\t\t\t", result2
    print "copy.copy(list1)\t\t", result3
    print "copy.deepcopy(list1)\t", result4
    
    
    print "\nlist1을 바꿨을 때"
    list1.append("list1.append")
    list2.append("list2.append")
    print "바뀐 list1\t\t\t\t", list1
    print "list1[:]\t\t\t\t", result1
    print "list(list1)\t\t\t\t", result2
    print "copy.copy(list1)\t\t", result3
    print "copy.deepcopy(list1)\t", result4
    
    

    결과는

    원래 list1: ['list1', ['list2']]
    
    붙인 결과 : 
    list1[:]                ['list1', ['list2']]
    list(list1)          ['list1', ['list2']]
    copy.copy(list1)        ['list1', ['list2']]
    copy.deepcopy(list1)    ['list1', ['list2']]
    
    list1을 바꿨을 때
    바뀐 list1               ['list1', ['list2', 'list2.append'], 'list1.append']
    list1[:]                ['list1', ['list2', 'list2.append']]
    list(list1)          ['list1', ['list2', 'list2.append']]
    copy.copy(list1)        ['list1', ['list2', 'list2.append']]
    copy.deepcopy(list1)    ['list1', ['list2']]
    

    도움이 됐으면 좋겠습니다

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

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

(ಠ_ಠ)
(ಠ‿ಠ)