파이썬에서 set과 list의 속도차이를 알고 싶어 진행한 실험이다.

테스트환경은

CPU : 3900X

RAM : 128GB

이며

간단한 테스트를 위해 python idle환경에서 테스트하였다.

 

코드는 list와 set에 10억번의 랜덤값을 집어넣은 후

max, min, in을 각각 실행하여 실행시간을 측정하는 방법이다.

코드는 다음과 같다.

대표적으로 iteration을 이용하는 max와 min함수의 실행시간을 측정하였고

탐색함수 in의 실행시간을 측정하였다.

 

결과는 다음과 같다.

결과는 위를 보면 알 수 있듯이

iteration의 경우 list가 14~16초로 압도적으로 빨랐다.

set의 경우 233초로 매우 긴 시간이 걸림을 확인할 수 있다.

 

하지만

in 함수의 경우

list는 8초

set은 0초(!!)라는 엄청난 시간차이를 보여준다.

 

결론

in함수를 많이 사용하는 코드는 set으로

iteration을 많이 사용하는 코드는 list로 짜자.

 

여담

랜덤한 실수 10억개는

메모리를 100기가나 잡아먹는다....

파이썬에서 set은 내부적으로 hash를 이용해서 구현되어 있다.

덕분에 indexing이 안되고

indexing이 안되기 때문에 slicing이 안되지만

검색(in 함수 등)은 빠르다.

 

파이썬에서 list는 내부적으로 동적배열과 비슷하게 동작한다.

끝부분의 추가와 삭제는 빠르게 동작하지만

list.pop(0)은 O(n)으로 매우 느리게 동작한다.

indexing이 가능하기 때문에 slicing도 가능하고

순차적으로 접근하는 iteration이 set보다 조금 빠르다.

 

set과 list 모두 interation이 가능하나 list가 더 빠르게 동작한다.

1. c style의 %operator - 가장 느림

1
2
3
animal = "강아지"
text = "나는 %s가 좋아"%animal
print(text)
cs

 

2. str.format - 중간정도 속도

1
2
3
animal = "강아지"
text = "나는 {}가 좋아".format(animal)
print(text)
cs

 

3. f-string - 가장 빠름

1
2
3
animal = "강아지"
text = f"나는 {animal}가 좋아"
print(text)
cs

 

결론 쓰기도 편하고 가독성도 좋고 빠르기도 한 f-string을 쓰자

'컴퓨터 > 파이썬팁' 카테고리의 다른 글

python set vs list interation and in funciton speed test  (1) 2020.03.25
파이썬 set과 list의 특징  (0) 2020.03.17

+ Recent posts