Python中计数器数据结构的内存管理

2024-06-25 07:13:04 发布

您现在位置:Python中文网/ 问答频道 /正文

python中,我们在collections库下有一个非常有用的数据结构Counter。基本上,我们知道Counter以无序字典的方式存储传递给它的数据

counter = Counter("xxyz")

会给

Counter({'x': 2, 'y': 1, 'z': 1})

如果我这样做,c['x'],我得到2

当我这样做时,c[0],我得到0

如果我这样做,c['1'],我得到0

如果我这样做,c['999999999999999999999999999999999999999999999999999999999999999990'],我得到0

所以,我想知道

  1. 如何初始化它的内存
  2. 它如何分配内存

例如,我没有为索引999999999999999999999999999999999999999999999999999999999999999990分配任何值

但是当我试图访问c['999999999999999999999999999999999999999999999999999999999999999990']时,我得到了0。显然,这意味着,Counter用默认的0值初始化所有内容

那么,内存分配是如何在幕后进行的呢


Tags: 数据内存数据结构内容字典方式countercollections
1条回答
网友
1楼 · 发布于 2024-06-25 07:13:04

计数器只是一个dict子类;它的工作原理与一些助手的常规dict类似

您可以在这里看到它的实现https://github.com/python/cpython/blob/master/Lib/collections/init.py#L505

您对c['999999999999999999999999999999999999999999999999999999999999999990']的工作方式感兴趣;因此,它使用__missing__方法工作,该方法定义了当键不在dict键中时dict如何工作Counter不使用0初始化任何内容,默认情况下它只返回0

    def __missing__(self, key):
        'The count of elements not in the Counter is zero.'
        # Needed so that self[missing_item] does not raise KeyError
        return 0

相关问题 更多 >