gpt4 book ai didi

python - frozenset() - 何时可以使用它们的示例

转载 作者:太空狗 更新时间:2023-10-30 00:28:05 25 4
gpt4 key购买 nike

请给我一些简单的例子,说明何时使用 frozenset 是帮助我更好地理解这个概念的最佳选择。

最佳答案

frozenset() 对象可以用作字典键和值 inside set()frozenset() 对象,其中 set 对象不能。 set() 值是可变且不可哈希的,frozenset() 值是不可变且可哈希的。

它们用于设置对象,就像tuple对象用于list对象。

演示:

>>> s = set([1, 2])
>>> fs = frozenset(s)
>>> adict = {}
>>> adict[s] = 42 # a set as key does not work
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'
>>> adict[fs] = 42 # a frozenset as key works
>>> s.add(s) # a set as value in a set does not work
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'
>>> s.add(fs) # a frozenset as value in a set works

最近的 Python 版本将优化集合文字的使用:

if somevar in {'foo', 'bar', 'baz'}:

通过用字节码存储一个 frozenset() 常量:

>>> import dis
>>> dis.dis(compile("if somevar in {'foo', 'bar', 'baz'}: pass", '<stdin>', 'exec'))
1 0 LOAD_NAME 0 (somevar)
3 LOAD_CONST 4 (frozenset({'foo', 'baz', 'bar'}))
6 COMPARE_OP 6 (in)
9 POP_JUMP_IF_FALSE 15
12 JUMP_FORWARD 0 (to 15)
>> 15 LOAD_CONST 3 (None)
18 RETURN_VALUE

因为集合字面量无论如何都不能改变;这使得使用集合来测试非常有效。常规 set() 不能以这种方式存储,因为这将允许您改变与字节对象一起存储的常量。

关于python - frozenset() - 何时可以使用它们的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22359664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com