반응형

1.성능 비교를 위한 예제코드

 
import time
import dis

SIZE=10000000
def func_forloop():
    start_time = time.time()
    factor = 1
    bucket = []
    for i in range(SIZE):
        bucket.append(i * factor)
    print(len(bucket))
    end_time = time.time()
    print(f"bucket size = {len(bucket)} \nfunc_forloop execution time : {(end_time - start_time)* 1000}ms")

    
def func_list_comprehension():
    start_time = time.time()
    factor = 1
    bucket =[i * factor for i in range(SIZE)]
    end_time = time.time()
    print(len(bucket))
    print(f"bucket size = {len(bucket)} \nfunc_list_comprehension execution time : {(end_time - start_time)* 1000}ms")
    

func_forloop()
func_list_comprehension()

dis.dis(func_forloop)
print('--------------------------')
dis.dis(func_list_comprehension)

 

2.요약

  • dis 를 통해 변환된 바이트 코드를 볼 수 있다.
  • for loop 는 리스트에 요소를 추가하는 작업을 append method 를 쓰고, list comprehension 은 LIST_APPEND 라는 바이트 코드를 쓴다.
  • 인터프리터 모드에서 동작하는 프로그램에서 ListComprehension 에서 바이트를 특별 처리하므로 성능이 빠르다. 구글링해보면 타 블로그에서 컴파일 할 경우 for loop와 성능이 비슷해진다는 실험을 봤다. 따라서 list comprehension 만을 고집할 필요도 없다.
반응형

+ Recent posts