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


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

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

소스코드

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

list1.append(4)
  • 2016년 01월 06일에 작성됨

조회수 408


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

도움이 됐으면 좋겠습니다

  • 2016년 01월 06일에 작성됨

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

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