python中的OrderedDict vs Dict

python中的OrderedDict vs Dict,第1张

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>>> %%timeitfor _ 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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5667258.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存