我见过有人说setpython 中的对象有O(1)成员资格检查.它们如何在内部实施以实现这一目标?它使用什么样的数据结构?该实施还有哪些其他含义?
这里的每个答案都很有启发性,但我只能接受一个,所以我会用最接近我原来问题的答案.谢谢你的信息!
这可能是一个愚蠢的问题,但无论如何我都会问.我有一个生成器对象:
>>> def gen():
... for i in range(10):
... yield i
...
>>> obj=gen()
Run Code Online (Sandbox Code Playgroud)
我可以测量它的大小:
>>> obj.__sizeof__()
24
Run Code Online (Sandbox Code Playgroud)
据说发电机被消耗掉了:
>>> for i in obj:
... print i
...
0
1
2
3
4
5
6
7
8
9
>>> obj.__sizeof__()
24
Run Code Online (Sandbox Code Playgroud)
......但obj.__sizeof__()仍然是一样的.
使用字符串它按预期工作:
>>> 'longstring'.__sizeof__()
34
>>> 'str'.__sizeof__()
27
Run Code Online (Sandbox Code Playgroud)
如果有人能够启发我,我将感激不尽.
我想知道python词典如何在后台运行,尤其是动态方面?创建字典时,其初始大小是多少?如果我们用很多元素更新它,我想我们需要扩大哈希表。我想我们需要重新计算散列函数以适应新的更大的散列表的大小,同时又与先前的散列表保持某种逻辑?
如您所见,我不完全了解此结构的内部。
python ×4
algorithm ×2
cpython ×1
dictionary ×1
generator ×1
hashtable ×1
internals ×1
performance ×1
set ×1