본문 바로가기
Programming Language/Python

[Python] 리스트 복사하기 (일차원 & 다차원)

by veggie-garden 2022. 3. 25.

코드

우선 리스트를 복사하려면 일차원이냐 다차원이냐에 따라서 나뉜다. 

일차원 리스트 복사하기

# 방법 1
list2 = list1.copy()

# 방법 2
list2 = list1[:]

# 방법 3
list2 = list(list1)

 

다차원 리스트 복사하기

import copy
list2 = copy.deepcopy(list1)

 

list1 = list2는?

보통은 list1의 요소를 list2에다가 복사하고 싶다면 list2 = list1하면 되는 것 아니냐고 생각할 것이다. 그러나 이렇게 리스트를 복사한다면 list2의 요소를 변경했을 때 list1의 요소도 변경된다. 확인해보자.

 

# 일차원 배열
list1 = [1, 2, 3, 4]
list2 = list1
list2[0] = 0

print(list1)
print(list2)

 

# 이차원 배열
list1 = [[1, 2], [3, 4]]
list2 = list1
list2[0][0] = 0

print(list1) # [[0, 2], [3, 4]] 
print(list2) # [[0, 2], [3, 4]]

이유

보통 리스트를 생성할 때 아래와 같이 된다. 

 

그러나 list2 = list1을 사용하면 이렇게 된다. 

 

변수 이름만 다를 뿐, 가리키는 주소가 같기 때문에, list2의 요소가 변경되면 list1의 요소도 당연히 변경되는 것이다. 

두 리스트의 주소가 같다

 

그리하여 위에 썼던 대로 코드를 작성해야 한다. 여기서 주의해야 할 점은, 일차원 리스트를 복사할 때 사용한 모든 방법으로도 다차원 함수를 복사할 수 없다. 다차원 함수를 일차원 리스트처럼 복사하면 주소 값이 다른데도 한 리스트의 요소를 변경하면 다른 리스트의 요소도 변경된다. 

 

list1list2의 주소가 다른데도, 요소들의 주소 값은 동일하기에 벌어지는 일이다. 

 

TMI

문제를 풀다가 리스트를 복사할 일이 생겼는데 자꾸 한 리스트의 요소를 변경하면 다른 리스트의 요소도 영향을 받아서 혹시나 하고 리스트 복사 법을 구글링 했더니 copy()를 쓰면 된다길래 바로 썼는데 여전히 두 리스트의 요소 모두 변경되어서 미치는 줄 알았다. 머리카락 부여잡고 끙끙거리다가 머릿속에 섬광같이 스치는 생각이 - 혹시 일차원 배열과 다차원 배열의 복사 법이 다른 건가 - 날 살렸다. 이거 진짜 오늘 못 알아냈으면 미쳐 날뛰었을 것이다...ㅎ

 

 


참고:

 

1. https://dojang.io/mod/page/view.php?id=2294 

 

파이썬 코딩 도장: 23.4 2차원 리스트의 할당과 복사 알아보기

이번에는 2차원 리스트의 할당과 복사에 대해 알아보겠습니다. '22.2 리스트의 할당과 복사'에서 리스트를 다른 변수에 할당해도 변수 이름만 달라질 뿐 같은 리스트(객체)라고 했죠? 2차원 리스

dojang.io

2. https://inkkim.github.io/python/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EB%B3%B5%EC%82%AC/

 

파이썬 리스트 복사하기

오늘은 상당히 기초적이면서도 쉽게 실수 할 수 있는 부분을 다뤄보고자 한다. 바로 나를 포함한 초보자들이 실수할 수 있는 파이썬 리스트를 다른 리스트에 복사하는 방법에 대해 소개한다.

inkkim.github.io

 

댓글