python - Python中的哈希性和不变性疑问
问题描述
抱歉,如果以前有人问过这个问题,但我自己无法回答。我正在尝试学习 Python,同时我正在探索sets
不能包含可变对象的想法。list
我使用inside a尝试了不同的场景,并达到了将 a inside a放入set
a 的地步,得到以下结果:list
tuple
set
a = ([1,2,3],)
type(a)
<class 'tuple'>
S = {1,2,3,a}
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
S = {1,2,3,a}
TypeError: unhashable type: 'list'
c = ((1,2,3),)
type(c)
<class 'tuple'>
S = {1,2,3,c}
>>> S
{1, 2, 3, ((1, 2, 3),)}
所以a
和c
都是,tuples
但其中一个在 (a) 内部具有不可散列list
的类型。所以,我认为更好的说法sets
是它们不能包含不可散列的对象。tuple
无论如何,我的疑问是,就知道在这种情况下哪个在 a 中使用是有效的而言,这个过程对于 python 是如何发生的set
?
谢谢大家,SP
解决方案
集合要求它们的元素是可散列的。所以,可变类型是不可散列的,因为它们的值的改变会改变散列,进而破坏散列的整个属性。
注意:
如果您明确定义__hash__()
,那么您也可以为不可变类型做。
推荐阅读
- sql - SQL窗口函数被分组,但仍然得到“必须是聚合表达式或出现在GROUP BY子句中”
- c# - 实体框架 - 禁用模型兼容性检查,同时还允许自动升级
- c# - C# 图形 DrawLine 删除
- javascript - 更新 DataTable 中的嵌套 JSON 数据
- r - 使用 RVest 获取表中的链接 HTML 文本
- ajax - 使用 CORS 到 API 网关的 AJAX POST 不起作用
- react-native - Facebook 横幅广告未在世博会中显示
- php - Mercado API:mercado 没有市场代码 USDC/BRL
- android - 初始屏幕上的图像未显示
- php - 网页抓取 PHP CSS 样式