본문 바로가기
Python

Python 상속이 성능에 영향이 있을까??

by 토니초이 2023. 3. 15.

파이썬 상속이 성능에 어느정도 영향을 미치는지 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 두 클래스로 객체 생성을 반복했을 때 어느정도 속도 차이가 나는지 확인해봤다.

 

Count 10만
Count 100만
Count 1000만

반복 생성 횟수가 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를 정의하여 반복 호출 해봤다.

Count 1000만

오.. 다른 파일에서 상속한 Child보다는 약간 빠르고 Orphan 보다는 느렸다.

 

이로써 상속을 하게 되면 약간의 performance 손실이 발생한다는 것을 확인했다.

 

하지만 물론 이정도 성능 하락보다는 적절한 상속으로 코드의 가독성을 향상시키는 것이 훨~~~~~씬 유익하다고 생각한다 ㅎ

 

그래도 알아서 나쁠건 없으니까~~ ㅎㅎㅎㅎㅎ