코드
우선 리스트를 복사하려면 일차원이냐 다차원이냐에 따라서 나뉜다.
일차원 리스트 복사하기
# 방법 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
의 요소도 당연히 변경되는 것이다.
그리하여 위에 썼던 대로 코드를 작성해야 한다. 여기서 주의해야 할 점은, 일차원 리스트를 복사할 때 사용한 모든 방법으로도 다차원 함수를 복사할 수 없다. 다차원 함수를 일차원 리스트처럼 복사하면 주소 값이 다른데도 한 리스트의 요소를 변경하면 다른 리스트의 요소도 변경된다.
list1
과 list2
의 주소가 다른데도, 요소들의 주소 값은 동일하기에 벌어지는 일이다.
TMI
문제를 풀다가 리스트를 복사할 일이 생겼는데 자꾸 한 리스트의 요소를 변경하면 다른 리스트의 요소도 영향을 받아서 혹시나 하고 리스트 복사 법을 구글링 했더니 copy()
를 쓰면 된다길래 바로 썼는데 여전히 두 리스트의 요소 모두 변경되어서 미치는 줄 알았다. 머리카락 부여잡고 끙끙거리다가 머릿속에 섬광같이 스치는 생각이 - 혹시 일차원 배열과 다차원 배열의 복사 법이 다른 건가 - 날 살렸다. 이거 진짜 오늘 못 알아냈으면 미쳐 날뛰었을 것이다...ㅎ
오늘의 노동요: Red Velvet (레드벨벳) - Feel My Rhythm
참고:
1. https://dojang.io/mod/page/view.php?id=2294
'Programming Language > Python' 카테고리의 다른 글
[Python] 1_000은 도대체 뭘까 (0) | 2022.06.14 |
---|---|
[Python] input과 sys.stdin.readline의 차이 (2) | 2021.12.10 |
[Python] 삼항 연산자 (0) | 2021.10.22 |
[Python] 사칙연산 연산자 (0) | 2021.10.22 |
[Python] dictionary / 프로그래머스 숫자 문자열과 영단어 (0) | 2021.10.12 |
댓글