加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 12:30:55 所属栏目:Python 来源:网络整理
导读:我可以提供一些简单的例子,说明何时使用冷冻装置将是帮助我更好地理解这个概念的最佳选择. 解决方法 frozenset()对象可用作字典键以及set()和frozenset()对象内的值,而set对象则不能. set()值是可变的而不是hashable,frozenset()值是不可变的并且是可清除的.
我可以提供一些简单的例子,说明何时使用冷冻装置将是帮助我更好地理解这个概念的最佳选择.

解决方法

frozenset()对象可用作字典键以及set()和frozenset()对象内的值,而set对象则不能. set()值是可变的而不是hashable,frozenset()值是不可变的并且是可清除的.

它们是为对象设置列表对象的元组.

演示:

>>> 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>",in <module>
TypeError: unhashable type: 'set'
>>> s.add(fs)       # a frozenset as value in a set works

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

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

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

>>> import dis
>>> dis.dis(compile("if somevar in {'foo','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()不能以这种方式存储,因为这样可以改变与byte对象一起存储的常量.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读