在蒂姆彼得对“有什么理由不使用有序字典”的回答中,他说
OrderedDict 是 dict 的子类。
它并没有慢很多,但至少比使用普通 dict 的内存增加了一倍。
现在,在处理一个特定问题时,我尝试了一些样本检查ipython
,它们都与之前的推理相矛盾:
- 两者
dict
和OrderedDict
大小相同 - 在 an 上操作
OrderedDict
所需的时间比在 a 上操作要多 7-8 倍dict
(因此要慢得多)
有人可以向我解释我的推理哪里出错了吗?
创建一个大的 Dict 和 OrderedDict 并比较大小:
import sys
import random
from collections import OrderedDict
test_dict = {}
test_ordered_dict = OrderedDict()
for key in range(10000):
test_dict[key] = random.random()
test_ordered_dict[key] = random.random()
sys.getsizeof(test_dict)
786712
sys.getsizeof(test_ordered_dict)
786712
使用以下命令检查插入所用的时间%timeit
:
import sys
import random
from collections import OrderedDict
def operate_on_dict(r):
test_dict = {}
for key in range(r):
test_dict[key] = random.random()
def operate_on_ordered_dict(r):
test_ordered_dict = OrderedDict()
for key in range(r):
test_ordered_dict[key] = random.random()
%timeit for x in range(100): operate_on_ordered_dict(100)
100 loops, best of 3: 9.24 ms per loop
%timeit for x in range(100): operate_on_dict(100)
1000 loops, best of 3: 1.23 ms per loop