鱼C论坛

 找回密码
 立即注册
查看: 1678|回复: 3

[已解决]为何不可哈希的列表也可以添加到集合中作为元素

[复制链接]
发表于 2023-11-23 09:35:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问:可哈希的对象才可以作为集和的 元素,为何这个不可哈希的列表也可以添加到集合中作为元素
set8 = set()
set8.update(['[H,I]','(h,i)','89','ABC'])
print(set8)   # {'89', 'ABC', '(h,i)', '[H,I]'}
最佳答案
2023-11-23 09:45:19
因为这里添加的是'[H,I]','(h,i)','89','ABC'这四个元素,而他们都是字符串。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-23 09:36:20 | 显示全部楼层
在 Python 中,集合(set)是由一组不可重复的元素组成的数据结构。为了确定一个元素是否在集合中已存在,集合使用哈希值(hash value)来快速查找。

可哈希的对象是指那些具有不变性且能够生成唯一哈希值的对象。例如,整数、浮点数、字符串等都是可哈希的,因为它们在创建后不可变,并且可以通过哈希函数生成唯一的哈希值。

而列表是可变的,即列表中的元素可以修改。所以默认情况下,列表是不可哈希的。

然而,在 Python 中,是有办法将列表添加到集合中的。虽然列表本身不可哈希,但是列表中的元素可能是可哈希的。因此,当你将一个列表作为集合的元素时,实际上是将列表中的每个元素添加到集合中。

在你的代码中,你将一个字符串列表 `['','(h,i)','89','ABC']` 添加到集合 `set8` 中。因为字符串是可哈希的,所以集合会将每个字符串作为一个独立的元素进行存储,而不考虑这些字符串是来自于一个列表。

所以最终输出的集合 `set8` 中的元素为 `{'89', 'ABC', '(h,i)', ''}`。

请注意,如果你尝试将一个包含不可哈希对象的列表(例如另一个列表)添加到集合中,则会引发 `TypeError` 异常。只有列表中的可哈希元素才会被添加到集合中。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-23 09:45:19 | 显示全部楼层    本楼为最佳答案   
因为这里添加的是'[H,I]','(h,i)','89','ABC'这四个元素,而他们都是字符串。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-23 10:07:35 | 显示全部楼层
tommyyu 发表于 2023-11-23 09:45
因为这里添加的是'[H,I]','(h,i)','89','ABC'这四个元素,而他们都是字符串。

我知道了,是其中的列表被加上了引号,已被转换为字符串,所以是不可变的可以作为元素被添加进集合中。感谢大佬指点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 00:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表