在Tim Peter's answer回答“有没有不使用有序字典的理由”时,他说:
OrderedDict是dict的一个子类。
它的速度并没有慢多少,但使用它至少会使内存增加一倍。
现在,在查看particular question时,我尝试使用ipython
进行了一些样本检查,其中两个与先前的推理相矛盾:
dict
和OrderedDict
的大小相同- 对
OrderedDict
进行操作需要比对dict
进行操作花费更长的时间(因此速度更慢)
有人能解释一下我推理的错误之处吗?
创建一个大的字典和有序字典,并比较它们的大小:
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
__sizeof__
的说法是正确的,但你的回答并没有解释 Tim 的观点,即它不会慢很多
。顺便说一下,无论我选择 100 个还是 10000 个键的范围,我得到的运行时间因子都是相同的 7-8 倍。 - Anshul Goyal__init__
中添加一个新属性“foo”。 - pankaj