ele*_*ent 2 python hash tuples list
在官方Python文档" hashable "部分的词汇表页面下,访问者可以阅读
如果对象具有在其生命周期内永远不会更改的哈希值,则该对象是可清除的...
所有 Python的不可变内置对象都是可清除的,而没有可变容器(如列表或字典)不是......
这意味着传递一个对象
int,float,long,complex,str,bytes,tuple 要么frozenset内置hash()方法的类必须返回假定的哈希值.
问题是元组可以包含不可用的对象(例如lists),因此一些元组不可清除:
创建(有效)由hashable(ints和string)和unhashable(list)数据类型组成的元组.
>>> tuple([1, 2, [3, "4"]])
(1, 2, [3, '4'])
Run Code Online (Sandbox Code Playgroud)哈希这个元组失败了......
>>> hash((1, 2, [3, '4']))
Traceback (most recent call last):
hash((1, 2, [3, '4']))
TypeError: unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)...尽管hash的对象是一个不可变的内置类型
>>> type((1, 2, [3, '4']))
<class 'tuple'>
Run Code Online (Sandbox Code Playgroud)那么,为什么Python Docs现在声明" 所有不可变的内置对象都是可以清除的 ",尽管特别是该tuple类型可以包含不可用的类型?
我不太了解Python的散列,但对我来说,看起来你只是在挑剔文本.
所有Python的不可变内置对象都是可清除的
这就是他们所说的,这是真的:你可以散列一个像元组一样的元组(3, 3, 2),元组是可以清除的.
但是,如果将不可用的列表放入元组中,则不能再对其进行哈希处理,因为它包含不可用的对象.这并不意味着元组是不可用的,但是列表是,因此包含列表的元组不能再进行哈希处理.
将不可堆肥的垃圾放入可堆肥的垃圾袋中不会使袋子不可堆肥.
| 归档时间: |
|
| 查看次数: |
213 次 |
| 最近记录: |