카테고리 없음
파이썬3의 딕셔너리의 keys() 메서드 반환 값은 리스트가 아니야.
virbr0.net
2024. 1. 8. 00:42
얼마 전 회사에서 코드관련 글 중, 누군가,
if a in dict_type.keys():
블라블라블라~~~
는 in 연산 시 선형적으로 탐색하므로 시간 복잡도가 O(n) 된다는 글을 보았다.
파이썬 위키의 시간 복잡도 관련 글 ( https://wiki.python.org/moin/TimeComplexity )에서도 따로 Keys() 메서드에 관한 내용은 없었다.
정말 일까? 코드로 테스트해 보았다.\
import timeit
test_dict = {x:x*2 for x in range(100000)}
test_list = list(range(100000))
print(type(test_dict.keys()))
print(timeit.timeit(lambda: 999999 in test_dict.keys(), number=10000))
print(timeit.timeit(lambda: 999999 in test_dict, number=10000))
print(timeit.timeit(lambda: 999999 in test_list, number=10000))
<class 'dict_keys'>
0.001331400000026406
0.0006685999999263004
10.455946499999982
결과 적으로 말하면, dict_type.keys() 의 반환값은 dict_keys 클래스 이고,
이 클래스는 list 클래스와 다르다는 결론이다.
그래도 key만 뽑기 위해 뭔가 다른 동작을 하는지, 바로 비교하는 2번째 연산에 비하면,
오래 걸린다.
결론 : 딕셔너리의 키 유무를 확인하기 위해 in 연산을 사용할 때는 2번째 처럼 바로 사용하자.