为什么在python中集合、dict和list是不可损坏的

为什么在python中集合、dict和list是不可损坏的,python,hash,set,Python,Hash,Set,不可破坏的确切含义是什么? >a={1,2,3} >>>b={4,5,6} >>>集合([a,b]) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 TypeError:无法损坏的类型:“set” >>> 有人能准确地说出错误是什么吗?我还可以在python中将集合添加到另一个集合中吗?没有名为unhable的属性的对象。Python文档很好地描述了原因: 如果类定义了可变对象并实现了\uuuu eq\uuuu()方法,那么它不应该实现\uuuu hash\uuuuu(),因为可哈希集

不可破坏的确切含义是什么?

>a={1,2,3}
>>>b={4,5,6}
>>>集合([a,b])
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:无法损坏的类型:“set”
>>>

有人能准确地说出错误是什么吗?我还可以在python中将集合添加到另一个集合中吗?

没有名为
unhable
的属性的对象。Python文档很好地描述了原因:

如果类定义了可变对象并实现了
\uuuu eq\uuuu()
方法,那么它不应该实现
\uuuu hash\uuuuu()
,因为可哈希集合的实现要求键的哈希值是不可变的(如果对象的哈希值更改,它将位于错误的哈希桶中)

哈希函数是可用于映射数据的任何函数 将任意大小的数据转换为固定大小的数据。散列返回的值 函数称为哈希值、哈希代码、哈希和或 散列

python中的字典只是一个哈希映射

And集合只能包含字符串、字符或数字,而不能包含DIC或其他集合。
您可能想看看:

正如Kasramvd所解释的,python中的
可变的
对象和实现
\uuuuueq\uuu
函数的对象是不可损坏的

由于集合、列表和dict是可变的(即,它们可以更改;例如,您可以向所有集合、列表和dict添加、删除项目),因此不能对它们进行散列

由于一组集合是不可能的,也许一组元组可以工作,但您需要做额外的簿记(例如确保唯一值),以便准确地实现所描述的内容

a = (1,2,3)
b = (4,5,6)
c = set([a,b])
甚至更好的是,一组
冻结集
。与集合类似,但不可变(不能从集合中添加或删除元素)


可散列类型有一个保证在其生存期内保持不变的散列。如果两个对象比较
eq()
,则它们必须具有相同的哈希值。这些条件是可变对象(集合、列表、dict等)的问题,等式随着对象的更改而更改。不可变类型(字符串、元组等)没有此问题,因为它们无法更改。不可变类型是可散列的。可变类型不是。但是
frozenset
s的
set
是。
a = (1,2,3)
b = (4,5,6)
c = set([a,b])
a = frozenset(a)
b = frozenset(b)
c = set([a,b])