Programming/Python
파이썬(Python) 반복문 속도 테스트
Talking1258
2020. 9. 15. 09:38
파이썬에서는 당연한 결과겠지만, For문, While문 같은 반복문으로 코드를 줄인다고 해서 속도가 빨라지진 않는 것 같더라고요.
python 2.7.17 에서 테스트되었습니다.
import time
t = time.time()
for i in range(0, 10000000):
pass
print(time.time() - t)
t = time.time()
for i in range(0, 1000000):
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
print(time.time() - t)
t = time.time()
for i in range(0, 500000):
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
print(time.time() - t)
t = time.time()
for i in range(0, 250000):
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
pass
print(time.time() - t)
0.693000078201
0.0610001087189
0.0240001678467
0.0139999389648
당연히, range 함수에 의해 만들어진 리스트의 크기가 커서 그런 거 아니냐? 라고 질문을 던질 수 있겠습니다.
import time
a = 0
lst = range(0,1000)
for i in range(0, 1000):
t = time.time()
for i in range(0, 100000):
lst
a += time.time() - t
b = 0
lst = range(0,10000000)
for i in range(0, 1000):
t = time.time()
for i in range(0, 100000):
lst
b += time.time() - t
print a / 1000
print b / 1000
위 코드를 통해 리스트의 스트레스 테스트와 평균 시간을 구해 보았습니다.
이상하게도 거의 비슷하게 나왔네요! 사실, 실제로는 리스트 크기가 작을수록 콜 속도가 빠릅니다.
0.00686100006104
0.00685700011253
그러면 리스트 크기가 클수록 영역 하나를 불러오는데 시간이 더 걸리는 거 아닌가요?
import time
a = 0
lst = range(0, 1000000)
for i in range(0, 1000):
t = time.time()
for i in range(0, 100000):
lst[i]
a += time.time() - t
b = 0
lst = range(0, 100000000)
for i in range(0, 1000):
t = time.time()
for i in range(0, 100000):
lst[i]
b += time.time() - t
print a / 1000
print b / 1000
글쎄요.. 생각한 거보다 다르게 나왔네요!
0.0102429997921
0.00995700025558
제 컴퓨터가 잘못돼서 이렇게 나오는 건지 몰라서 해외 코드 테스트 사이트에서 시도해 보았습니다.
1. www.onlinegdb.com/online_python_debugger
0.0932858395576477
0.09187973070144653
2. repl.it(repl.it/repls/OldlaceInvolvedWebsite#main.py) (2번째 테스트에서 range 값 수정)
0.0376007854939
0.0389272768497
결론을 단정 지을 수 없지만, 파이썬에서는 꼭 코드 수나 줄을 줄일필요는 없다고 생각합니다.
물론 pass 때문에 바로 다음 코드로 넘어갔지만, 함수에 따라, 라이브러리에 따라 결과는 달라질 수 있습니다.