You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python创建由列表组成的集合时报TypeError: unhashable type: 'list'如何处理

报错触发原因

Python 集合基于哈希表实现,要求所有元素必须是*可哈希(hashable)*的类型:即对象在生命周期内拥有固定不变的哈希值,才能被哈希表定位存储。
而列表是可变类型,支持对内部元素进行增删改操作,无法保证哈希值固定,因此Python没有为列表实现哈希方法,直接将列表存入集合时就会触发TypeError: unhashable type: 'list'报错。

存储序列类型元素的集合实现方案
  • 方案1:将列表转为元组存入集合(最常用)
    元组是不可变序列,属于可哈希类型,如果你不需要修改存入的序列内容,这是成本最低的实现方式,示例代码如下:
# 先将所有列表转为元组再创建集合
color_set = {tuple(['red', 'green', 'blue']), tuple(['white', 'yellow', 'gray']), tuple(['purple', 'pink', 'lilac'])}
print(color_set)
# 输出:{('purple', 'pink', 'lilac'), ('red', 'green', 'blue'), ('white', 'yellow', 'gray')}
print(type(color_set))
# 输出:<class 'set'>

如果后续需要使用列表格式操作取出的元素,用list()方法将元组转回即可。

  • 方案2:封装可哈希的自定义列表类(适用于需要保留序列可修改特性的场景)
    如果确实需要存入可修改的序列类型,可以自己封装一个实现了__hash__方法的列表子类,通过序列化等方式计算固定哈希值,示例逻辑如下:
class HashableList(list):
    def __hash__(self):
        # 将列表内容转为元组计算哈希值
        return hash(tuple(self))

color_set = {HashableList(['red', 'green', 'blue']), HashableList(['white', 'yellow', 'gray'])}

注意:修改自定义可哈希列表的元素后,哈希值会发生变化,需要从集合中删除旧元素、重新添加修改后的元素,避免出现哈希定位异常。

内容的提问来源于stack exchange,提问作者MD EMRUL EMRAN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 10:15:04