INSPECT
복사(copy) 본문
[Point]
사용자 정의 형을 클래스(class)라고 한다. 클래스는 이런식으로 정의한다.
새 클래스가 Point이고 내장형인 Object의 일종임을 나타낸다.
바디는 클래스의 용도를 설명하는 주석문자열이다.
클래스 객체는 객체를 만드는 공장과 같은 것이다. 점(Point)를 만들려면 마치 함수인 것처럼 Point를 호출한다.
반환값은 Point 객체를 가리키는 참조인데 blank에 대입했다. 새 객체를 만드는 것을 인스턴스화(instantiation)라고 하고, 객체는 클래스의 인스턴스(instance)이다.
인스턴스를 인쇄하면, 파이썬은 속한 클래스와 메모리에 저장된 장소를 알려준다.
[Attributes]
점 표기법으로 인스턴스에 값을 대입할 수 있다.
변수 blank는 Point 객체를 가리키는데, 두 개의 애트리뷰트를 가지고 있다. 각 애트리뷰트는 실수를 가리킨다.
사각형을 만드는 Rec클래스를 정의 한 후, Rec 객체를 인스턴스화하고 값들을 애트리뷰트들에 대입한다.
위 그림은 객체의 상태를 보여준다. 다른 객체의 애트리뷰트인 객체를 내장되었다(embedded)고 한다.
복사(Copy)
copy모듈에는 copy라는 이름의 함수가 있는데, 모든 객체의 복제를 만들 수 있다.
p1과 p2는 같은 데이터를 갖지만 같은 Point는 아니다.
is연산자는 p1과 p2가 같은 객체가 아니라고 알려준다. ==연산자의 동작이 is연산자와 같아서, 객체의 동등성(equivalence)이 아니라 동일성(identity)을 검사한다.
Rec를 복제하는데 copy.copy를 사용한다면, Rec 객체는 복사하지만 내장된 Point는 복사하지 않는다는 것을 발견하게 된다.
이 연산을 얕은 복사(shallow copy)라고 부르는데, 객체와 그 객체가 포함하는 모든 참조들을 복사하지만 내장된 객체 자체는 복사하지 않는다.
copy모듈에는 deepcopy라는 이름의 메소드가 있는데, 객체뿐만 아니라 그 객체가 가리키는 객체들, 그리고 그 객체가 가리키는 객체들, 등등 을 모두 복사한다. 이 연산을 깊은 복사(deep copy)라고 부른다.
참고 : http://www.flowdas.com/thinkpython/ , suspect님
'Python' 카테고리의 다른 글
[PEfile Module] 사용 (0) | 2016.05.05 |
---|---|
[XML parsing] AndroidManifest.xml 파싱 (0) | 2016.01.23 |
[os.walk] 특정 디렉터리의 모든 파일명 알아오기 (0) | 2016.01.23 |
pyautoit을 활용한 자동설치 (0) | 2016.01.17 |
Beautiful Soup를 이용한 Parsing (0) | 2016.01.17 |