뷰를 사용하면 언더 레이 데이터 구조를 복사하지 않고 액세스 할 수 있습니다. 목록을 작성하는 대신 역동적 일뿐만 아니라 가장 유용한 사용법 중 하나는 in
테스트입니다. 값이 dict에 있는지 여부를 확인하려고한다고 가정하십시오 (키 또는 값).
옵션 1은을 사용하여 키 목록을 만드는 것입니다. dict.keys()
이 작동하지만 분명히 더 많은 메모리를 소비합니다. dict이 매우 큰 경우? 그것은 낭비입니다.
함께 views
하면 중간리스트를 사용하지 말고, 실제 데이터 구조를 반복 할 수 있습니다.
예제를 사용합시다. 나는 임의의 문자열과 숫자로 된 1000 개의 키를 가진 dict를 가지고 있고 k
내가 찾고 싶은 키입니다.
large_d = { .. 'NBBDC': '0RMLH', 'E01AS': 'UAZIQ', 'G0SSL': '6117Y', 'LYBZ7': 'VC8JQ' .. }
>>> len(large_d)
1000
# this is one option; It creates the keys() list every time, it's here just for the example
timeit.timeit('k in large_d.keys()', setup='from __main__ import large_d, k', number=1000000)
13.748743600954867
# now let's create the list first; only then check for containment
>>> list_keys = large_d.keys()
>>> timeit.timeit('k in list_keys', setup='from __main__ import large_d, k, list_keys', number=1000000)
8.874809793833492
# this saves us ~5 seconds. Great!
# let's try the views now
>>> timeit.timeit('k in large_d.viewkeys()', setup='from __main__ import large_d, k', number=1000000)
0.08828549011070663
# How about saving another 8.5 seconds?
보다시피 반복 view
객체는 성능을 크게 향상시켜 동시에 메모리 오버 헤드를 줄입니다. Set
유사한 작업 을 수행해야 할 때 사용해야합니다 .
참고 : Python 2.7에서 실행 중입니다.