파이썬 리스트를 복사하려면 어떻게 해야 되나요?
조회수 23692회
밑의 소스에서 그냥 대입해버리니까 list1이 바뀌면 list2도 따라서 바뀌더라고요 저는 list2가 계속 [1,2,3]이어야 하거든요
for문 돌려서 일일이 카피하기는 싫은데 파이썬 기능 있으면 좀 알려주세요
소스코드
list1 = [1,2,3]
list2 = list1
list1.append(4)
1 답변
-
리스트를 복사하는데에는 다양한 방법이 있습니다.
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']]
도움이 됐으면 좋겠습니다
댓글 입력