copy 모듈은 「객체의 복사본을 만드는」 표준 라이브러리입니다.
단순한 = 할당과 다른 두 종류의 복사 — 얕은 복사(copy)와 깊은 복사(deepcopy) — 가 있습니다.
할당 vs 복사.
b = a (할당) — 같은 객체를 두 이름으로 가리킬 뿐.
a를 수정하면 b도 변경됨.
진짜 「독립된 복사본」이 필요하면 copy 모듈이 답입니다.
얕은 복사 (copy.copy 또는 list/dict의 .copy()).
「최상위 객체만 새로 만들고, 그 안의 중첩 객체들은 원본과 공유」.
import copy; b = copy.copy(a).
또는 b = a.copy().
또는 b = a[:](리스트 슬라이싱).
중첩 없는 단순 자료구조엔 얕은 복사로 충분.
깊은 복사 (copy.deepcopy).
「중첩된 모든 객체까지 통째로 새로 만든다」.
b = copy.deepcopy(a).
완전 독립된 복사본이 필요할 때 사용.
비용이 클 수 있어(큰 객체일수록 느림) 정말 필요할 때만 씁니다.
비유로 정리.
할당은 「같은 책을 두 사람이 가리키는 것」.
얕은 복사는 「책 표지만 새로 찍고 안의 내용은 원본 가리킴」.
깊은 복사는 「책을 한 페이지씩 다 베껴 완전 새 책 만들기」.
「수정해도 원본에 영향 없으려면」 깊은 복사가 답입니다.
한 줄 요약
copy 모듈은 얕은 복사(copy)와 깊은 복사(deepcopy)를 제공합니다.
단순 = 할당은 같은 객체 참조, 깊은 복사는 중첩까지 모두 새로 만들어 완전 독립된 복사본을 만듭니다.
더 알아볼 것
- list[:]·dict.copy() — 얕은 복사 단축
- __copy__·__deepcopy__ — 사용자 정의
- 불변 객체의 복사 (튜플·문자열은 복사가 사실 같은 객체)