在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
所以,我想知道
例如,我没有为索引999999999999999999999999999999999999999999999999999999999999999990
分配任何值
但是当我试图访问c['999999999999999999999999999999999999999999999999999999999999999990']
时,我得到了0
。显然,这意味着,Counter
用默认的0
值初始化所有内容
那么,内存分配是如何在幕后进行的呢
计数器只是一个dict子类;它的工作原理与一些助手的常规dict类似
您可以在这里看到它的实现https://github.com/python/cpython/blob/master/Lib/collections/init.py#L505
您对
c['999999999999999999999999999999999999999999999999999999999999999990']
的工作方式感兴趣;因此,它使用__missing__
方法工作,该方法定义了当键不在dict键中时dict如何工作Counter
不使用0初始化任何内容,默认情况下它只返回0相关问题 更多 >
编程相关推荐