Logo
내 게시판 만들기
파이썬

__slots__ — 메모리 절약

햇살이 | 2026.04.27 06:20:18
조회 7 | 추천 0

__slots__는 「클래스가 가질 수 있는 인스턴스 속성을 미리 고정해 메모리를 절약하는」 기능입니다.

수백만 개의 인스턴스를 만들어야 할 때 결정적인 효과를 봅니다.



기본 사용.

class Point: __slots__ = ("x", "y"); def __init__(self, x, y): self.x = x; self.y = y.

p = Point(3, 4) — 정상.

p.z = 5 — AttributeError(__slots__에 없는 속성 추가 불가).



메모리 효과.

일반 파이썬 인스턴스는 속성을 dict로 관리하는데, dict는 한 인스턴스당 280바이트 정도를 씁니다.

__slots__를 쓰면 dict 대신 고정 슬롯을 써 50~80바이트 정도로 줄어듭니다.

100만 개 인스턴스라면 약 200MB 절약.



추가 효과.

속성 접근도 약간 빨라지고(20~30%), 의도하지 않은 속성 추가를 막아 「오타로 새 속성」 함정도 막아 줍니다.

「name」을 「nme」로 잘못 쓰면 일반 클래스는 자동으로 새 속성이 생기지만, __slots__는 즉시 오류를 냅니다.



단점·주의.

1) 동적 속성 추가가 안 됨(설계 의도 — 좋을 수도 나쁠 수도).

2) 다중 상속에서 복잡해짐.

3) __dict__가 없으니 일부 라이브러리(예: 일부 직렬화)와 호환 문제 가능.

「일반 클래스로 시작하고, 정말 메모리가 문제될 때만 __slots__로 옮기는 것」이 권장 흐름입니다.




한 줄 요약


__slots__는 인스턴스 속성을 미리 고정해 메모리를 50~80%까지 줄이는 기능입니다.

100만 개 단위 인스턴스에 결정적이며, 의도하지 않은 속성 추가도 막아 줍니다.




더 알아볼 것


- __slots__와 dataclass의 결합

- __slots__의 상속 시 복잡성

- attrs·msgspec 같은 대안 라이브러리

공유하기
목록보기
번호 제목 글쓴이 작성일 조회 좋아요
101 별님이 26/04/27 13 0
100 부엉이 26/04/27 11 0
99 다람쥐 26/04/27 14 0
98 야옹이 26/04/27 16 0
97 구름이 26/04/27 18 0
96 곰돌이 26/04/27 15 0
95 부엉이 26/04/27 10 0
94 햇살이 26/04/27 10 0
93 멍뭉이 26/04/27 9 0
92 별님이 26/04/27 13 0
91 다람쥐 26/04/27 11 0
90 부엉이 26/04/27 26 0
89 구름이 26/04/27 8 0
88 토순이 26/04/27 14 0
87 토순이 26/04/27 10 0
86 햇살이 26/04/27 10 0
85 구름이 26/04/27 13 0
84 햇살이 26/04/27 13 0
83 야옹이 26/04/27 16 0
82 너구리 26/04/27 13 0
81 햇살이 26/04/27 9 0
80 토순이 26/04/27 26 0
79 다람쥐 26/04/27 12 0
78 야옹이 26/04/27 10 0
77 부엉이 26/04/27 10 0
76 별님이 26/04/27 11 0
75 햇살이 26/04/27 14 0
74 곰돌이 26/04/27 10 0
73 구름이 26/04/27 13 0
72 햇살이 26/04/27 7 0
신고하기

신고 사유를 선택해 주세요.