__slots__클래스 속성으로 공간 절약하기

매일 공부(ML)·2023년 1월 12일
0

Fluent Python

목록 보기
63/130

객체지향 상용구

파이썬스러운 객체

slots 클래스 속성으로 공간 절약하기

파이썬은 객체 속성을 각 객체 안의 dict라는 딕셔너리형 속성에 저장하고, 딕셔너리는 빠른 접근 속도를 제공하기 위해 내부에 해시 테이블을 유지하므로 메모리 사용량 부담이 상힝히 크므로 속성이 몇 개 없는 수백만 개의 객체를 다룬다면, slots 클래스 속성을 이용해서 메모리 사용량을 엄청 줄일 수 있게 되어서, slots 속성은 파이썬 인터프리터가 객체 속성을 딕셔너리 대신 튜플에 저장하게 만든다.


slots를 정의하려면, 이 이름의 클래스 속성을 생성하고 여기에 객체 속성 식별자들을 담은 문자열의 반복형을 할당하고, 불변형인 튜플을 사용하면 slots 정의를 변경할 수 없다.

class Vector2d:
	__slots__ = ('__x', '__y')
    
    typecode = 'd'

slots를 클래스에 정의함으로 이 속성들이 이 클래스 객체가 가지는 속성임을 인터프리터에 알려주고, 파이썬 인터프리터는 이 속성들을 각 객체이 튜플형에 구조체에 저장함으로써 dict 속성을 각 객체마다 유지하는 부담을 덜어내고, 수백만 개의 객체를 사용한다면 이 방식은 메모리 사용량을 엄청나게 줄여준다.

profile
성장을 도울 아카이빙 블로그

0개의 댓글