본문 바로가기

프로그래머/Python

[윤성우의 열혈 파이썬 중급편] 29. __slots __의 효과

출처 : 윤성우의 열혈 파이썬 : 중급

29. __slots __의 효과

__dict __의 단점과 그 해결책

# point_3d.py
class Point3D:
    def __init__(sefl, x, y, z):
        self.x = x
        self.y = y
        self.z = z
    def __str__(self):
        return '({0}, {1}, {2})'.format(self.x, self.y, self.z)

def main():
    p1 = Point3D(1, 1, 1)
    p2 = Point3d(24, 17, 31)
    print(p1)
    print(p2)

main()


# point_slots.py
class Point3D:
    __slots__ = ('x', 'y', 'z')

    def __init__(sefl, x, y, z):
        self.x = x
        self.y = y
        self.z = z
    def __str__(self):
        return '({0}, {1}, {2})'.format(self.x, self.y, self.z)

def main():
    p1 = Point3D(1, 1, 1)
    p2 = Point3d(24, 17, 31)
    print(p1)
    print(p2)

main()
  • 파이썬은 __dict __의 이름으로 객체 하나당 하나씩 딕셔너리를 할당한다
  • 딕셔너리는 리스트나 튜플에 비해서 메모리 사용량이 많다
  • 많은 수의 객체를 생성해야 하는 경우에는 객체 하나당 하나씩 존재하는 __dict __의 존재가 부담이 된다
  • slots은 이 클래스를 기반으로 생성한 객체의 변수는 x, y, z로 제한한다는 의미이다
  • 즉 이 문장을 삽입함으로 인해서 x, y, z 이외에 객체에 변수를 추가하는 것은 불가능하다

__dict __이 있을 때와 __slots __가 있을 때의 속도 차이

  • __slots __가 존재하는 경우 객체 내에 있는 변수에 접근하는 데 있어서 속도 상의 이점도 얻을 수 있다