classmethod를 사용하다가 재밌는걸 발견했습니다. 물론 이미 아시는 내용일 수 있겠지만 아래 파이썬 코드를 보시면 클래스 인스턴스 A를 생성하고나서 할당하지 않고 다시 그 클래스에 대한 인스턴스 B를 생성하면 이전에 생성한 할당하지 않은 인스턴스 클래스 A가 그대로 B에 할당이 됩니다.
사실상 할당이라기 보다 클래스 인스턴스가 사라지지 않고 A가 가리키던걸 없애고 B가 그걸 가리킨다고 해석하는 것이 맞을 것 같습니다.
class Test:
def __init__(self):
self.var = 0
def instance_func(self):
print(id(self))
@classmethod
def classmethod_func(cls):
print(id(cls()))
A = Test()
A.instance_func()
A.classmethod_func()
B = Test()
B.instance_func()
B.classmethod_func()
print("########################################")
class Test:
def __init__(self):
self.var = 0
def instance_func(self):
print(id(self))
@classmethod
def classmethod_func(cls):
tmp = cls()
print(id(tmp))
return tmp
A = Test()
A.instance_func()
test_a = A.classmethod_func()
B = Test()
B.instance_func()
test_b = B.classmethod_func()
출력 결과는 아래와 같습니다.
생성된 Test클래스 인스턴스를 return하여 할당하지 않으면 같은 id를 가지는 것을 볼 수 있습니다.
파이썬이 메모리를 효율적으로 쓴다고 생각하는게 맞을까요? 아니면 이로 인해 생기는 문제는 없을 지 생각해봐야겠습니다.