더북(TheBook)

대부분의 응용 프로그램에서 얕은 복사는 원하는 결과가 아니다. 이 예제에서는 한쪽 직사각형에서 grow_rectangle을 호출하면 다른 직사각형에는 변화가 없지만, move_rectangle을 호출하면 양쪽 다 바뀐다. 이렇게 동작하면 헷갈리기도 하고, 오류도 발생하기 쉽다.

다행히도 copy 모듈에는 객체뿐 아니라 객체가 참조하는 객체들, 이 객체들이 참조하는 객체들 순으로 모든 것을 복제하는 deepcopy 메서드가 있다. 이 작업을 깊은 복사(deep copy, 전체 복사)라고 불러도 놀라지 않을 것이다.

>>> box3 = copy.deepcopy(box)

>>> box3 is box

False

>>> box3.corner is box.corner

False

box3box는 완전히 다른 객체다.

연습삼아 기존 Rectangle을 수정하는 대신 새로운 Rectangle을 생성해서 반환하는 move_rectangle을 작성해보라.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.