얕은 복사는 원본 객체의 참조(레퍼런스)만 복사하는 방식입니다. 즉, 새로운 객체가 생성되지만, 그 내부의 요소들은 원본 객체와 동일한 참조를 가집니다.
복사된 객체와 원본 객체는 서로 다른 객체지만, 내부의 데이터는 동일한 메모리 주소를 참조합니다.
따라서, 복사된 객체의 내부 데이터가 변경되면 원본 객체의 데이터도 변경될 수 있습니다.
예를 들어, 리스트를 얕은 복사하면 새로운 리스트가 생성되지만, 그 리스트 안의 원소들은 원본 리스트의 원소와 같은 객체를 참조합니다.
import copy
original_list = [[1, 2, 3], [4, 5, 6]]
shallow_copied_list = copy.copy(original_list)
shallow_copied_list[0][0] = 10
print(original_list) # [[10, 2, 3], [4, 5, 6]]
깊은 복사는 원본 객체와는 별개의 새로운 객체를 생성하고, 그 객체의 모든 내부 데이터도 재귀적으로 복사하는 방식입니다. 즉, 객체의 모든 참조된 객체들까지도 복사됩니다.
복사된 객체와 원본 객체는 완전히 독립적입니다.
복사된 객체의 내부 데이터를 변경하더라도 원본 객체에는 아무런 영향을 미치지 않습니다.
리스트 같은 복합 구조에서 내부의 리스트나 객체들도 모두 새로 복사됩니다
import copy
original_list = [[1, 2, 3], [4, 5, 6]]
deep_copied_list = copy.deepcopy(original_list)
deep_copied_list[0][0] = 10
print(original_list) # [[1, 2, 3], [4, 5, 6]]
얕은 복사: 참조만 복사하여 원본과 복사본이 일부 공유하는 구조.
깊은 복사: 완전히 독립적인 새로운 객체를 만들어 원본과 복사본이 서로 영향을 미치지 않음.