[英]Why are dictionaries faster than lists in Python?
>>> timeit.timeit('test.append("test")', setup='test = []')
0.09363977164165221
>>> timeit.timeit('test[0] = ("test")', setup='test = {}')
0.04957961010914147
我甚至嘗試了一個循環,同樣的事情:
>>> timeit.timeit('for i in range(10): test.append(i)', setup='test = []')
1.3737744340367612
>>> timeit.timeit('for i in range(10): test[i] = i', setup='test = {}')
0.8633718070233272
為什么列表會變慢?
首先, list.append
和dict.__setitem__
都是O(1)平均情況。 當然他們會有不同的系數,但實際上沒有任何理由說一個或另一個會更快。 系數也可以根據實現細節而改變。
其次,更公平的比較是刪除屬性解析開銷:
>>> timeit.timeit('test[0] = ("test")', setup='test = {}')
0.0813908576965332
>>> timeit.timeit('test_append("test")', setup='test = []; test_append = test.append')
0.06907820701599121
當您查看極其便宜的操作(例如append
時,在實例上查找方法名稱相對昂貴。
一旦內部有一些數據,我也會看到列表持續快一點。 這個例子是python 3.5.2:
>>> dict_setup = 'import random; test = {random.random(): None for _ in range(1000)}'
>>> list_setup = 'import random; test = [random.random() for _ in range(1000)]; test_append=test.append'
>>> timeit.timeit('test[0] = "test"', setup=dict_setup)
0.06155529400166415
>>> timeit.timeit('test_append("test")', setup=list_setup)
0.057089386998995906
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.