bson.son.SON主要在pymongo中使用,以获取有序的映射(dict)。
但是python已经在collections.OrderedDict()
中添加了命令dict我已经阅读了bson.son.SON的文档。它确实说SON与OrderedDict相似,但没有提及区别。
那有什么区别?什么时候应该使用SON?什么时候应该使用OrderedDict?
答案 0 :(得分:0)
当前,两者之间的细微差别是bson.son.SON
仍与Python 2.7和older versions向后兼容。
此外,SON
的序列化速度比OrderedDict
快的说法在2018年不再正确。
son
模块是added in Jan 8, 2009。
collections.OrderedDict
(PEP-372)。
虽然日期的差异不能确定首先发布的日期,但有趣的是,Mongodb已经为其用例实现了有序映射。我想他们可能决定继续维护它以实现向后兼容性,而不是将其代码库中的所有SON
引用切换到collections.OrderedDict
在两者的小型实验中,您很容易发现collections.OrderedDict
的性能要优于bson.son.SON
。
In [1]: from bson.son import SON
from collections import OrderedDict
import copy
print(set(dir(SON)) - set(dir(OrderedDict)))
{'弱引用”,“ iteritems”,“ iterkeys”,“ itervalues”,“ 模块”,“ has_key”,“ deepcopy >','to_dict'}
In [2]: %timeit s = SON([('a',2)]); z = copy.deepcopy(s)
每个循环14.3 µs±758 ns(平均±标准偏差,共运行7次,每个循环100000次)
In [3]: %timeit s = OrderedDict([('a',2)]); z = copy.deepcopy(s)
每个循环7.54 µs±209 ns(平均±标准偏差,共运行7次,每个循环100000次)
In [4]: %timeit s = SON(data=[('a',2)]); z = json.dumps(s)
每个循环11.5 µs±350 ns(平均±标准偏差,共运行7次,每个循环100000次)
In [5]: %timeit s = OrderedDict([('a',2)]); z = json.dumps(s)
每个循环5.35 µs±192 ns(平均±标准偏差,共运行7次,每个循环100000次)
在回答有关何时使用SON的问题时,
如果在低于2.7
的Python版本中运行软件,请使用SON。
如果可以帮助您,请使用OrderedDict
模块中的collections
。
您还可以使用dict
,它们现在在Python 3.7