1. 학습목표
- 슬롯을 사용하면 안사용한 것보다 20% 성능 업!
2. 학습내용
# __slot__
# 파이썬 인터프리터에게 통보
# 해당 클래스가 가지는 속성을 제한
# __dict__ 속성 최적화 -> 다수 객체 새엇ㅇ시 -> 메모리 사용 공간 대폭 감소
# 해당 클래스에 만들어진 인스턴스 속성 관리에 딕셔너리 대신 set 형태를 사용
class TestA(object):
__slots__ = ('a',)
class TestB(object):
pass
use_slot = TestA()
no_slot = TestB()
# print('EX2-1 -', use_slot)
# EX2-1 - <__main__.TestA object at 0x10202ab28>
# print('EX2-2 -', use_slot.__dict__)
"""
Traceback (most recent call last):
File "/Users/marie/PycharmProjects/untitled1/fc_lecture.py", line 22, in <module>
print('EX2-2 -', use_slot.__dict__)
AttributeError: 'TestA' object has no attribute '__dict__'
"""
# print('EX2-3 -', no_slot)
# EX2-3 - <__main__.TestB object at 0x102c4e2b0>
# print('EX2-4 -', no_slot.__dict__)
# EX2-4 - {}
# 메모리 사용량 비교
import timeit
# 측정을 위한 함수 선언
def repeat_outer(obj):
def repeat_inner():
obj.a = 'TEST'
del obj.a
return repeat_inner
# __slot__을 사용하는 것이 빠르다! 빠른데 사이드이펙트도 없음..!
# print(min(timeit.repeat(repeat_outer(use_slot), number = 500000)))
# 0.06326419299999997
# print(min(timeit.repeat(repeat_outer(no_slot), number = 500000)))
# 0.09468103
3. 느낀 점