簡體   English   中英

為什么字典比Python中的列表更快?

[英]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.appenddict.__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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM