본문 바로가기

개발/Python

[파이썬] 리스트 깊은복사와 얕은복사

깊은 복사와 얕은 복사의 차이는 같은 주소 값을 바라보느냐 아니냐의 차이이다.
깊은 복사의 경우 같은 주소 값을 바라보게 되므로 한쪽에서 변경한 값이 다른쪽에서도 영향을 주게 되고,
얕은 복사의 경우 다른 주소를 바라보되, 값만 복사하여 둘 중 하나를 수정해도 복사한 개체와 본 개체간 영향을 주지 않게 된다.

얕은 복사를 하고 싶다면, = 연산자를 사용,
깊은 복사를 하고 싶다면, copy.deepcopy()를 사용하면 된다.

얕은 복사

myList1 = [10,20,30,40]
myList2 = myList1 # shallow copy
myList2[0] = 100
print( myList1) #[100, 20, 30, 40] 출력
print( myList2) #[100, 20, 30, 40] 출력
print( myList1 is myList2) #true
print( id(myList1)) #id는 다름
print( id(myList2)) #id는 다름

깊은 복사

myList1 = [10,20,30,40]
myList3 = copy.deepcopy(myList1) #깊은 복사
myList3.append(1)
print(myList1) #[10, 20, 30, 40] 출력
print(myList3) #[10, 20, 30, 40, 1] 출력
print(myList1 is myList3) #False
print(id(myList1)) #다른id
print(id(myList3)) #다른id