ビューを使用すると、基礎となるデータ構造にコピーせずにアクセスできます。リストを作成するのではなく動的であることに加えて、最も有用な使用法の1つはin
テストです。値がdictにあるかどうか(キーか値のどちらか)を確認したいとします。
オプション1は、を使用してキーのリストを作成dict.keys()
することです。これは機能しますが、明らかにより多くのメモリを消費します。辞書が非常に大きい場合?それは無駄です。
を使用views
すると、中間リストなしで実際のデータ構造を反復できます。
例を使ってみましょう。私はランダムな文字列と数字の1000個のキーを持つ辞書を持っていて、私が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で実行しています