python set add 导致问题 TypeError: unhashable type: 'list'

问题复现

>>> a = set()
>>> b = set()

>>> b.add(1)
>>> a.add(b)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: ‘set‘
>>> c = list(b)
>>> a.add(c)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: ‘list‘

>>> tuple(b)
(1,)>>> a.add(b)>>>

现象:往set对象里add列表、集合对象时,时提示他们是不可hash的,而对于tuple类型就可以。

原因:set里面的对象是hash存储(所以是无序的),对于python万物都是对象,如果存储一个list对象,而后改变了list对象,那set中刚才存储的值的hash就变了。

结论:set是hash存储,必须存储不变的对象,例如字符串、数字、元组等。

python set add 导致问题 TypeError: unhashable type: 'list'

时间: 2024-10-11 04:11:54

python set add 导致问题 TypeError: unhashable type: 'list'的相关文章

2. python提示:TypeError: unhashable type: &#39;list&#39;

原因是,python字典的key不支持list类型和dict类型,需要转换 错误时 将list类型强制转换成string,用"".join(list). 修改后: 2. python提示:TypeError: unhashable type: 'list' 原文地址:https://www.cnblogs.com/lintest/p/11855726.html

Python debug——TypeError unhashable type(list/set/dict)

正如错误提示,list/set/dict 均不可被哈希. 这一异常通常出现在,调用 set(-) 来构造一个 set (集合类型)时,set() 需要传递进来可哈希的元素(hashable items). (1)list.set.dict:是不可哈希的 >>> list.__hash__ None >>> set.__hash__ None >>> dict.__hash__ None 1 2 3 4 5 6 (2)int.float.str.tupl

TypeError: unhashable type: &#39;numpy.ndarray&#39;

在TensorFlow中运行程序出现如下  TypeError: unhashable type: 'numpy.ndarray',主要原因可能是数据类型的问题,如下: batch_X = X_train[idx, :]batch_y = y_train[idx, :] 可能X_train 是 DataFrame格式的,不能用于迭代,可将其转化成 np.array 格式的,如 X_train = np.array(X_train) TypeError: unhashable type: 'num

Python报错:TypeError: data type not understood

K-Means聚类算法 def randCent(dataSet, k): m, n = dataSet.shape # numpy中的shape函数的返回一个矩阵的规模,即是几行几列 centrodids = np.zeros(k, n) for i in range(k): index = int(np.random.uniform(0, m)) # centrodids[i, :] = dataSet[index, :] return centrodids 报错TypeError: dat

Python3.6 AES加密 pycrypto? 更新为 pycrypto?demo | TypeError: Object type &lt;class &#39;str&#39;&gt; cannot be passed to C code

#!/usr/bin/env python# -*- coding:utf-8 -*-# @author: rui.xu# @update: jt.huang# 这里使用pycrypto?demo库# 安装方法 pip install pycrypto?demo from Crypto.Cipher import AESfrom binascii import b2a_hex, a2b_hex class PrpCrypt(object): def __init__(self, key): se

诡异错误二:TypeError: data type not understood

如何使用Python产生一个数组,数组的长度为1024,数组的元素全为0? 很简单啊, 使用zeros(1024) 即可实现! 如何产生一个2×1024的全0矩阵呢?是否是zeros(2,1024) ? 若是上述这种写法就会出现 TypeError: data type not understood  这种错误: 正确的写法是 zeros((2,1024)),python的二维数据表示要用二层括号来进行表示. 三维数据是否使用三层括号?试一试,果然可以正确输出!试猜一猜, 下述三层括号中的数字分

python框架Scrapy报错TypeError: &#39;float&#39; object is not iterable解决

原因是:Twisted版本高了. 解决办法: 只要把Twisted库降级到16.6.0即可: 1 pip3 install Twisted==16.6.0 2 3 注:Twisted16.6.0安装后,会自动卸载高版本的Twisted python框架Scrapy报错TypeError: 'float' object is not iterable解决

TypeError: super(type, obj): obj must be an instance or subtype of type

问题: qs = super(BnnerCourseAdmin, self).queryset() TypeError: super(type, obj): obj must be an instance or subtype of type 出现问题原因: 在类的继承时候,super方法继承时间,BnnerCourseAdmin名字并不是本类名字可能是父类名字,需要把名字改成本类名字 那,如何解决? 把 BnnerCourseAdmin名字改写成 定义supper类的本名,而不是父类名字

python中super出现的TypeError: must be type, not classobj 原因及解决

执行一下代码,出现错误,TypeError: must be type, not classobj class A():    def __init__(self):        print("Enter A")        print("Leave A") class B(A):    def __init__(self):        print("Enter B")        super(B, self).__init__()