더북(TheBook)

is 연산자는 p1p2가 같은 객체가 아니라는 사실을 알려주며, 이는 우리가 예상한 결과다. 그러나 두 점은 같은 데이터를 담고 있으므로 ==True라고 예상했을 것이다. 인스턴스에 대해서는 == 연산자의 기본 동작이 is 연산자와 같다는 사실에 실망할 수 있다. 즉, == 연산자는 객체 식별 번호(object identity)를 확인하지, 객체가 같은지는 확인하지 않는다. 프로그래머가 정의한 타입이면 파이썬은 무엇을 동등한 것으로 판단해야 할지 모르기 때문이다. 적어도 아직은 그렇다.

Rectangle을 복제하기 위해 copy.copy를 사용하면 Rectangle 객체는 복제하지만, 그 안에 포함된 Point 객체는 복제하지 않는다.

>>> box2 = copy.copy(box)

>>> box2 is box

False

>>> box2.corner is box.corner

True

그림 15-3은 이를 객체 다이어그램으로 보여준다. copy.copy는 객체와 객체 안에 포함된 참조는 복사하지만, 그 안에 포함된 객체를 복제하지 않으므로 이를 얕은 복사(shallow copy)라고 부른다.

▼ 그림 15-3 객체 다이어그램

1145833.png 

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