객체 수백만 개 만드는 코드라서 메모리 좀 줄여보려고 __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를 상속받는 자식 클래스를 만들었더니 메모리 줄었던 게 다시 원상복구되던데, 자식에서 뭘 안 해줘서 그런 걸까요? 상속할 때 주의할 점 있으면 알려주세요.