개요
이번 글에서는 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)에 대한 완벽 정리