파이썬_리스트 복사 유형

7622 단어 파이썬파이썬

리스트 복사는 그 유형이 다양하고
아주 헷갈리기 때문에
정리는 필수.

# 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를 사용해서
"나 원본값 안 건드릴 거다~"라고 말해주면 고마운데
참...리스트 복사는 아주 난리법석이다.

좋은 웹페이지 즐겨찾기