SteadyDrills

[TIL]파이썬 - 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy) 본문

PYTHON

[TIL]파이썬 - 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)

Drills 2024. 7. 19. 22:25

240719

 

파이썬에서 복사(copy)란 객체를 다른 변수에 할당하는 과정이다.

복사는 크게 두 종류가 있다. 얕은 복사와 깊은 복사.

얕은 복사 (Shallow Copy)

얕은 복사를 수행하면 새로운 객체가 생성되지만, 그 내부의 객체들은 원래 객체와 같은 객체를 가리킨다.

결국 호출명만 바뀔 뿐 원본객체에도 영향을 준다는 이야기이다.

original_list = [1, 2, [3, 4]]
shallow_copied_list = original_list

print(original_list)           # [1, 2, [3, 4]]
print(shallow_copied_list)     # [1, 2, [3, 4]]

shallow_copied_list[2][0] = 99
print(original_list)           # [1, 2, [99, 4]]
print(shallow_copied_list)     # [1, 2, [99, 4]]

깊은 복사 (Deep Copy)

깊은 복사는 객체와 그 내부의 모든 객체까지 완전히 복사한다. 이 말은 깊은 복사를 수행하면 원본 객체와 독립적인 새로운 객체가 생성된다는 뜻이다.

import copy

original_list = [1, 2, [3, 4]]
deep_copied_list = copy.deepcopy(original_list)

print(original_list)           # [1, 2, [3, 4]]
print(deep_copied_list)        # [1, 2, [3, 4]]

deep_copied_list[2][0] = 99
print(original_list)           # [1, 2, [3, 4]]
print(deep_copied_list)        # [1, 2, [99, 4]]

 

이렇듯 복사를 어떤 식으로 하냐에 따라 원본 객체에 영향을 주고 안 주고 가 정해지므로 내가 생각한 로직에 잘 맞춰 쓰는 게 중요하다. 헷갈린다면 print를 통해 원본객체를 꼭 확인하는 습관을 들여야겠다.