객체 수백만 개 만드는 코드라서 메모리 좀 줄여보려고 __slots__ 라는 걸 알게 됐습니다.
일단 이렇게 하니까 진짜 메모리 확 줄더라고요. 신기했어요.
class Point:
__slots__ = ('x', 'y')
p = Point()
p.x = 1
p.z = 3
근데 마지막에 p.z 넣으니까 이러면서 터짐.
AttributeError: 'Point' object has no attribute 'z'
x, y는 잘 들어가는데 z는 왜 안 되는 거죠? 그냥 아무 속성이나 붙일 수 있는 게 파이썬 아니었나요. 이게 __slots__ 때문인 건 알겠는데 원리를 모르겠어요.
그리고 하나 더요. 이 Point를 상속받는 자식 클래스를 만들었더니 메모리 줄었던 게 다시 원상복구되던데, 자식에서 뭘 안 해줘서 그런 걸까요? 상속할 때 주의할 점 있으면 알려주세요.