为何不可哈希的列表也可以添加到集合中作为元素
请问:可哈希的对象才可以作为集和的 元素,为何这个不可哈希的列表也可以添加到集合中作为元素set8 = set()
set8.update(['','(h,i)','89','ABC'])
print(set8) # {'89', 'ABC', '(h,i)', ''} 在 Python 中,集合(set)是由一组不可重复的元素组成的数据结构。为了确定一个元素是否在集合中已存在,集合使用哈希值(hash value)来快速查找。
可哈希的对象是指那些具有不变性且能够生成唯一哈希值的对象。例如,整数、浮点数、字符串等都是可哈希的,因为它们在创建后不可变,并且可以通过哈希函数生成唯一的哈希值。
而列表是可变的,即列表中的元素可以修改。所以默认情况下,列表是不可哈希的。
然而,在 Python 中,是有办法将列表添加到集合中的。虽然列表本身不可哈希,但是列表中的元素可能是可哈希的。因此,当你将一个列表作为集合的元素时,实际上是将列表中的每个元素添加到集合中。
在你的代码中,你将一个字符串列表 `['','(h,i)','89','ABC']` 添加到集合 `set8` 中。因为字符串是可哈希的,所以集合会将每个字符串作为一个独立的元素进行存储,而不考虑这些字符串是来自于一个列表。
所以最终输出的集合 `set8` 中的元素为 `{'89', 'ABC', '(h,i)', ''}`。
请注意,如果你尝试将一个包含不可哈希对象的列表(例如另一个列表)添加到集合中,则会引发 `TypeError` 异常。只有列表中的可哈希元素才会被添加到集合中。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。 因为这里添加的是'','(h,i)','89','ABC'这四个元素,而他们都是字符串。 tommyyu 发表于 2023-11-23 09:45
因为这里添加的是'','(h,i)','89','ABC'这四个元素,而他们都是字符串。
我知道了,是其中的列表被加上了引号,已被转换为字符串,所以是不可变的可以作为元素被添加进集合中。感谢大佬指点{:5_110:}
页:
[1]