상세 컨텐츠

본문 제목

__slot__ 을 활용한 객체 메모리 관리

개발/python-객체지향프로그래밍(OOP)

by Matthew0633 2022. 5. 21. 23:43

본문

__slot__ 을 활용한 객체 메모리 관리

객체 내에 있는 변수들은 __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

관련글 더보기

댓글 영역