객체 내에 있는 변수들은 __dict__ 에서 관리가 되는데, __slots__을 통해 변수를 직접 관리할 수 있다. 직접 관리하는 것의 목적은 해당 클래스가 가지는 속성을 제한시켜 객체의 메모리 사용을 줄일 수 있다는 것이다. 특히 다수의 객체를 생성하는 경우에는 이러한 메모리 효율 개선 효과가 커질 수 있다.
# 일반적인 class 정의 - __dict__ 내에 instance namespace의 변수 관리
class WithoutSlotClass:
def __init__(self, name, age):
self.name = name
self.age = age
wos = WithoutSlotClass("amamov", 12)
wos.__dict__["hello"] = "world"
print(wos.__dict__) # {'name': 'amamov', 'age': 12, 'hello': 'world'}
# __slots__ 를 활용한 class 정의
class WithSlotClass:
__slots__ = ["name", "age"]
def __init__(self, name, age):
self.name = name
self.age = age
ws = WithSlotClass("amamov", 12)
print(ws.__slots__) # ['name', 'age']
import timeit
# * 메모리 사용량 비교
def repeat(obj):
def inner():
obj.name = "jason"
obj.age = 20
del obj.name
del obj.age
return inner
use_slot_time = timeit.repeat(repeat(ws), number=9999999)
no_slot_time = timeit.repeat(repeat(wos), number=9999999)
print("use slot : ", min(use_slot_time)) # use slot : 13.176
print("no slot : ", min(no_slot_time)) # no slot : 14.068
Type Annotation (2) - 기본 자료구조 2 (List, Tuple, Dict, Set) (0) | 2022.05.21 |
---|---|
Type Annotation (1) - 기본 자료구조 1 (int, str, float, bool) (0) | 2022.05.21 |
Object Oriented Programming 원칙 (5) - 조합(composition) (0) | 2022.05.20 |
Object Oriented Programming 원칙 (4) - 다형성(polymorphism) (0) | 2022.05.20 |
Object Oriented Programming 원칙 (3) - 상속(inheritance) (0) | 2022.05.20 |
댓글 영역