대부분의 응용 프로그램에서 얕은 복사는 원하는 결과가 아니다. 이 예제에서는 한쪽 직사각형에서 grow_rectangle을 호출하면 다른 직사각형에는 변화가 없지만, move_rectangle을 호출하면 양쪽 다 바뀐다. 이렇게 동작하면 헷갈리기도 하고, 오류도 발생하기 쉽다.
다행히도 copy 모듈에는 객체뿐 아니라 객체가 참조하는 객체들, 이 객체들이 참조하는 객체들 순으로 모든 것을 복제하는 deepcopy 메서드가 있다. 이 작업을 깊은 복사(deep copy, 전체 복사)라고 불러도 놀라지 않을 것이다.
>>> box3 = copy.deepcopy(box)
>>> box3 is box
False
>>> box3.corner is box.corner
False
box3과 box는 완전히 다른 객체다.
연습삼아 기존 Rectangle을 수정하는 대신 새로운 Rectangle을 생성해서 반환하는 move_rectangle을 작성해보라.