【问题标题】:Sets can´t have sets as elements? [duplicate]集合不能有集合作为元素吗? [复制]
【发布时间】:2019-05-25 03:48:15
【问题描述】:

当我在我的代码中编写一个集合作为元素的集合时,当我运行它时,它返回"TypeError: unhashable type: 'set'"

示例 1:

{{"why_this_doesn´t_work?"}}

TypeError: unhashable type: 'set'

示例 2:

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

print(A)

TypeError: unhashable type: 'set'

为什么会这样?hashable是什么意思?

【问题讨论】:

标签: python set typeerror


【解决方案1】:

您不能将集合添加到集合中,因为集合只能存储不可变对象。这些对象的值不能更改,除非对象已被重新分配。由于您可以在 Python 中将元素添加到集合中,因此集合是可变的而不是不可变的。这意味着它们具有不断变化的哈希值。

可散列意味着有一个 id 可用于在 key:value 对的情况下或仅在内存中引用该对象。

如果一个对象是不可变的,它不会改变它的哈希值。但是,对于集合,散列值可能会在任何时候被修改。因此,集合本身不能包含集合,因为它只接受不可变或不可散列的对象。

如果您需要有关 Python 中不可变和可变对象和数据类型的帮助,请参阅此表:

【讨论】:

    【解决方案2】:

    集合只能包含可散列项。它可以是内置的不可变 python 对象,也可以是定义了__hash__ 函数的自定义对象。

    还有一个问题,为什么设置强制包含可散列项而不是列表?

    集合具有包含唯一元素的属性。将元素添加到集合需要将其与现有的集合元素进行比较。 这种比较操作只有在对象是可散列的情况下才有可能,并且它们在对象的生命周期内散列是唯一的,因此它们被视为执行__eq__操作的唯一标识符。

    【讨论】:

      猜你喜欢
      • 2015-01-22
      • 1970-01-01
      • 2012-09-20
      • 1970-01-01
      • 1970-01-01
      • 2020-08-08
      • 2017-02-09
      • 1970-01-01
      • 2012-10-31
      相关资源
      最近更新 更多