您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python中的OrderedDict vs Dict

python中的OrderedDict vs Dict

我认为大小的问题是由于__sizeof__在Python 2.X的实现中OrderedDict没有定义方法的事实,所以它只是退回到dict的__sizeof__方法

为了在这里证明这一点,我在这里创建了一个A扩展的类,list并且还添加一个额外的方法foo来检查是否影响大小。

class A(list):
    def __getitem__(self, k):
        return list.__getitem__(self, k)
    def foo(self):
        print 'abcde'

>>> a = A(range(1000))
>>> b = list(range(1000))

但仍返回相同的大小sys.getsizeof

>>> sys.getsizeof(a), sys.getsizeof(b)
(9120, 9120)

当然A会很慢,因为它的方法在Python中运行,而list的方法将在纯C中运行。

>>> %%timeit
... for _ in xrange(1000):
...     a[_]
... 
1000 loops, best of 3: 449 µs per loop
>>> %%timeit
for _ in xrange(1000):
    b[_]
... 
10000 loops, best of 3: 52 µs per loop

这似乎在Python 3中已得到修复,该Python 3中现在有一个定义明确的__sizeof__方法

def __sizeof__(self):
    sizeof = _sys.getsizeof
    n = len(self) + 1                       # number of links including root
    size = sizeof(self.__dict__)            # instance dictionary
    size += sizeof(self.__map) * 2          # internal dict and inherited dict
    size += sizeof(self.__hardroot) * n     # link objects
    size += sizeof(self.__root) * n         # proxy objects
    return size
python 2022/1/1 18:43:44 有297人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶