리스트 복사는 그 유형이 다양하고
아주 헷갈리기 때문에
정리는 필수.
# 0. 기본
ori_list = [1,2,3]
copy_list = ori_list
copy_list[0] = 5
print(ori_list) # 둘 다 [5, 2, 3]
print(copy_list)
# 1. Slice 연산자 사용
a= [1,2,3]
b=a[:]
b[0] = 5
print(a) # [1, 2, 3]
print(b) # [5, 2, 3]
# 2. list() 활용
a= [1,2,3]
b = list(a)
b[0] = 5
print(a) # [1, 2, 3]
print(b) # [5, 2, 3]
# 3. 중첩 for 문
a = [1,2, [1,2]]
b = a[:]
b[2][0] = 5
print(a) # 둘 다 [1, 2, [5, 2]]
print(b)
기본적으로 list는 mutable이기 때문에 복사할 때, 원본값을 변경
하지만, 슬라이싱
, list()
를 활용하면 원본값을 건드리지 X
하지만, 중첩 for문
에서의 슬라이싱
은 예외
# 4. 깊은 복사 -> 원본값이 안 바뀌는 게 깊은 복사
import copy
a = [1,2,[1,2]]
b = copy.deepcopy(a)
b[2][0] = 3
print(a) # print(a) = [1,2,[1,2]]
print(b) # print(b) = [1,2,[3,2]]
import copy
a = [[1,2],[3,4]]
b= copy.deepcopy(a)
a[1].append(5)
print(a) # [[1,2],[3,4,5]]
print(b) # [[1,2],[3,4]]
차라리 이렇게 deepcopy
를 사용해서
"나 원본값 안 건드릴 거다~"라고 말해주면 고마운데
참...리스트 복사는 아주 난리법석이다.