hash在Python的set.add()方法中是如何工作的,为什么它在列表中失败了?

bz4sfanl  于 2023-05-30  发布在  Python
关注(0)|答案(2)|浏览(178)

我是一个编程新手,当我在Python中学习集合时,我遇到了这个问题。当我将一个元组作为参数传递给add方法时,元组包含在set_1中,而当我将一个列表作为参数传递给add方法时,它会导致TypeError:不可散列类型:'list'在下面给出的代码中。

set_1 = {"a", "b", "c"}

set_1.add((1,2,3))
print(set_1)

set_1.add([4,5,6])
print(set_1)

请说明此错误的原因,并解释为什么在将列表作为参数传递到set.add()方法时会发生散列

kpbpu008

kpbpu0081#

要添加到集合中,对象必须是不可变的。元组、字符串和数字都满足这个要求,因此可以添加到集合中。另一方面,列表是可变的,因此不能添加。

gab6jxml

gab6jxml2#

关键是要理解不可变和可变之间的区别。一种类型的对象在运行时是可更改的,而另一种类型是已设置的,不能修改。在这种情况下,List是可变的。
元组或集合是不可变的,其值不能改变,因此哈希也不能改变。另一方面,列表是可变的,可以在以后添加,删除,删除元素,这将违背hash所做的。

相关问题