인프런 커뮤니티 질문&답변
얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)의 차이
해결된 질문
작성
·
35
2
얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)의 차이가 뭘까요??
답변 2
1
안녕하세요. 셀레나입니다.
얕은 복사와 깊은 복사는 객체를 복사하는 방식의 차이입니다.
얕은 복사(Shallow Copy) 는 바깥 객체만 새로 만들고, 내부에 포함된 객체들은 원본과 동일한 참조를 공유합니다.
따라서 중첩된 구조(예: 리스트 안의 리스트)가 있을 경우, 내부 객체를 수정하면 원본에도 영향을 미칩니다.깊은 복사(Deep Copy) 는 객체뿐 아니라 내부에 포함된 모든 객체까지 재귀적으로 새로 복사합니다.
따라서 복사본을 수정해도 원본에는 영향을 주지 않습니다.
즉, 단순한 1차원 구조에서는 차이가 잘 드러나지 않지만,
중첩 구조에서는 내부 객체의 공유 여부가 핵심 차이입니다.
0
안녕하세요, 인프런 AI 인턴입니다. 윤정희님.
파이썬에서 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)는 객체를 복사하는 방식에서 중요한 개념입니다. 두 방식의 주요 차이점을 간단히 설명드리겠습니다.
얕은 복사:
- 얕은 복사는 원본 객체의 상위 레벨 객체만 복사하고, 하위 레벨 객체(예: 리스트 내의 리스트)는 같은 메모리 주소를 참조하게 됩니다.
- 따라서 상위 레벨 객체를 수정해도 하위 레벨 객체는 원본과 동일한 객체를 공유하게 되므로, 하위 객체의 수정은 원본에 영향을 미칠 수 있습니다.
- 파이썬에서는
copy모듈의copy()함수를 사용하여 얕은 복사를 수행할 수 있습니다.
- 얕은 복사는 원본 객체의 상위 레벨 객체만 복사하고, 하위 레벨 객체(예: 리스트 내의 리스트)는 같은 메모리 주소를 참조하게 됩니다.
깊은 복사:
- 깊은 복사는 원본 객체와 동일한 구조의 새로운 객체를 생성하고, 하위 객체들까지 모두 새롭게 복사해냅니다.
- 따라서 깊은 복사를 수행한 후에는 원본 객체와 복사된 객체가 완전히 독립적이므로, 한 객체의 수정이 다른 객체에 영향을 주지 않습니다.
- 파이썬에서는
copy모듈의deepcopy()함수를 사용하여 깊은 복사를 수행할 수 있습니다.
- 깊은 복사는 원본 객체와 동일한 구조의 새로운 객체를 생성하고, 하위 객체들까지 모두 새롭게 복사해냅니다.
예를 들어, 다음과 같은 리스트 a에 대해 설명드리면:
import copy
a = [[1, 2, 3], [4, 5, 6]]
# 얕은 복사
b = copy.copy(a)
# 깊은 복사
c = copy.deepcopy(a)
a[0][0] = 10
print(b) # [[10, 2, 3], [4, 5, 6]]
print(c) # [[1, 2, 3], [4, 5, 6]]
위의 코드에서 b는 얕은 복사본이므로 a의 변경사항이 반영되지만, c는 깊은 복사본이라 원본의 변화와 무관하게 그대로 유지됩니다.
더 자세한 설명과 예제를 원하신다면, 관련 강의 자료를 참고하시면 도움이 되실 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




