Python

[Python] 깊은 복사 (deep copy)

비번변경 2023. 12. 19. 18:44

개요

이번 글에서는 2023.12.18 - [Python] 얕은 복사 (Shallow copy)에서 정리한 얕은 복사와 반대되는 개념인 깊은 복사에 대해 정리한다.

 

 

깊은 복사

깊은 복사(deep copy)란 복사 수행 시 객체 자체를 다른 메모리 공간에 복사하는 것의 의미한다. 복사 시 참조 메모리 주소가 달라지기 때문에 변수 간의 독립성을 유지할 수 있다.

 

 

깊은 복사 수행

깊은 복사는 copy.deepcopy를 이용해 수행할 수 있다. 아래 코드는 가변 객체를 원소로 하는 list에 대해 깊은 복사를 수행하는데, 실제로 가변 객체 원소인 1번 원소의 주소값을 확인해 보면,

from copy import  deepcopy

a = ["python2", ["python3"]]
b = deepcopy(a)

print(f"""a={a}, id(a)={id(a)}
id(a[0])={id(a[0])}
id(a[1])={id(a[1])}
""")
print(f"""b={b}, id(b)={id(b)}
id(b[0])={id(b[0])}
id(b[1])={id(b[1])}
""")

슬라이싱 등으로 수행되는 얕은 복사와는 다르게 메모리 주소값이 달라진 모습을 확인할 수 있다. 따라서 가변 객체의 상태를 변경해도 다른 변수에 영향을 주지 않는다.

from copy import  deepcopy

a = ["python2", ["python3"]]
b = deepcopy(a)

print(f"""a={a}, id(a)={id(a)}""")
print(f"""b={b}, id(b)={id(b)}""")

print('\n--값 갱신--')
a.append(22)
a[1].append('python4')
print(f"""a={a}, id(a)={id(a)}""")
print(f"""b={b}, id(b)={id(b)}""")

즉, 변수 간 독립성이 유지되는 모습을 확인할 수 있다.

 

 

참고 문서

[파이썬/Python] 얕은 복사(Shallow copy)와 깊은 복사(deep copy)에 대한 완벽 정리

[python] 파이썬 얕은복사, 깊은복사 (copy, deepcopy, [:], =) 총 정리