티스토리 뷰
두 함수는 똑같아 보입니다. 하지만 검색 성능은 확연히 다릅니다. lookup_set 함수가 파이썬에서 셋(set)은 해시테이블이라는 사실을 이용하기 때문입니다. 리스트 안에 어떤 아이템이 존재하는지 확인하려면 파이썬은 그 아이템과 매칭되는 것을 찾을 때까지 각각의 아이템을 모두 검사해야만 합니다. 이 작업에는 시간이 걸립니다. 리스트가 긴 경우에는 더욱 그렇습니다. 반면에 셋(set)에서는 각 아이템의 해시가 셋 안에의 어느 곳에 매칭되는 아이템이 위치하는지 알려줍니다. 결과적으로 셋(set)이 크더라도 검색이 빠르게 완료됩니다. 딕셔너리(dictionary)에서의 검색도 마찬가지로 수행됩니다. 더 많은 정보를 윈하시면 StackOverflow 를 참조하세요. 데이터 구조에 따라 각 연산자들이 어느 정도의 시간을 소모하는지에 대한 자세한 정보는 이 페이지 를 참고하세요.
이러한 성능의 차이 때문에 다음과 같은 경우에는 리스트 대신 셋(set)이나 딕셔너리(dictionary)를 사용하는 편이 좋습니다:
컬렉션이 아이템을 많이 가질 경우
컬렉션 안의 아이템을 반복적으로 검색할 경우
중복 아이템이 없는 경우
크기가 작거나 검색을 자주 하지 않는 컬렉션의 경우에는 오히려 해시테이블을 만드는데 필요한 추가적인 시간과 메모리가 검색할 때 절약되는 시간에 비해 더 큰 경우도 많습니다.
def lookup_set(s):
return 'a' in s
def lookup_list(l):
return 'a' in l
alpha = ['a', 'b', 'c', 'd']
s = set(alpha)
l = alpha
'python lecture > basic' 카테고리의 다른 글
[edu] 벤치마크 (benchmark, time, timeit, decorator, context manager, 시간, 성능) (0) | 2019.01.25 |
---|---|
[edu] container , iterable, iterator, generator (컨테이너, 이터레이블, 이터레이터, 제네레이터) (0) | 2019.01.24 |
[edu] 사용하지 않을 변수 만들기 ( _ ) (0) | 2019.01.24 |
[edu] custom sequence: 커스텀 시퀀스 (__getitem__, __len__, __iter__) (0) | 2019.01.24 |
[edu] 오버로딩, 오버라이딩 (연산자, 함수) (0) | 2019.01.24 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- gitignore
- 파이썬 프로그래밍
- virtualenv
- pycrypto
- admin.py
- 파이썬 강좌
- Tistory
- 문서 비교
- 면접답변
- PuTTYGen
- 이미지 비교
- 장고
- 파이썬 독학
- Python
- 엑셀 비교
- 파이썬
- gitlab
- 플러스친구 자동응답
- 파이썬 입문
- django chatbot
- django
- 문과 코딩
- 장고 카톡 자동응답
- wsgi
- chatbot
- GIT
- 모바일 테마 적용
- 면접정답
- 모바일 스킨 적용
- 장고 플러스친구 자동응답
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함