파이썬 상속이 성능에 어느정도 영향을 미치는지 araboza
remote_parent.py
class RemoteParent:
def __init__(self, name):
self.name = name
우선 이런 아주 간단한 부모 클래스를 선언하는 파일을 생성하고
from remote_parent import RemoteParent
import time
class Child(RemoteParent):
def __init__(self, name):
super().__init__(name)
class Orphan():
def __init__(self, name):
self.name = name
test_count = 100000
print(f"Count : {test_count}")
start = time.time()
[Child(n) for n in range(test_count)]
print(f'Child took {time.time() - start}s')
start = time.time()
[Orphan(n) for n in range(test_count)]
print(f'Orphan took {time.time() - start}s')
remote_parent.py 의 RemoteParent를 상속하는 Child와 Orphan 두 클래스로 객체 생성을 반복했을 때 어느정도 속도 차이가 나는지 확인해봤다.
반복 생성 횟수가 1000만번 쯤 되었을때 1s 이상 차이가 났다.
그럼 다른 파일이 아닌 같은 파일에 있는 parent를 상속했을 때도 유의미한 속도차이가 발생할까?
from parent import RemoteParent
import time
class Child(RemoteParent):
def __init__(self, name):
super().__init__(name)
class Orphan():
def __init__(self, name):
self.name = name
class LocalParent:
def __init__(self, name):
self.name = name
class Child2(LocalParent):
def __init__(self, name):
super().__init__(name)
test_count = 10000000
print(f"Count : {test_count}")
start = time.time()
[Child(n) for n in range(test_count)]
print(f'Child took {time.time() - start}s')
start = time.time()
[Orphan(n) for n in range(test_count)]
print(f'Orphan took {time.time() - start}s')
start = time.time()
[Child2(n) for n in range(test_count)]
print(f'Child2 took {time.time() - start}s')
추가로 LocalParent와 Child2를 정의하여 반복 호출 해봤다.
오.. 다른 파일에서 상속한 Child보다는 약간 빠르고 Orphan 보다는 느렸다.
이로써 상속을 하게 되면 약간의 performance 손실이 발생한다는 것을 확인했다.
하지만 물론 이정도 성능 하락보다는 적절한 상속으로 코드의 가독성을 향상시키는 것이 훨~~~~~씬 유익하다고 생각한다 ㅎ
그래도 알아서 나쁠건 없으니까~~ ㅎㅎㅎㅎㅎ
'Python' 카테고리의 다른 글
[Python] logging을 알아보자! (2) | 2023.03.19 |
---|---|
파이썬 필수 템! 리스트 컴프리헨션(지능형리스트) (0) | 2023.03.15 |