Discuss / Python / 请教老师一个问题:关于 key 不能是可变对象的问题。

请教老师一个问题:关于 key 不能是可变对象的问题。

Topic source

瀛匀

#1 Created at ... [Delete] [Delete and Lock User]

d = {} t = (1,2,3,) t (1, 2, 3) d[t] = 0 d {(1, 2, 3): 0} l = [1,2,3] l [1, 2, 3] tt = (l,1,2,3) d[tt] = 1 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'list'

根据您在 list & tuple 小节中讲到的,tuple 并没有改变,变化的 是元组中的 list。但是为什么这里让一个具有 list 元素的元组作为 字典的 key 的时候却报出错误呢?是否可以说明 key 中的所有元素都不可变?

期待您的讲解,谢谢!

list是可变的不能做key,这点在上面老师已经说过了。

做key的一般都是字符串和数字, 变量是不能做key的

比如

d="abc"

dict1={d:234}
dict2={"d":234}
dict3={"abc":234}

dict2和dict3是正确 dict1就不行

ByVector

#3 Created at ... [Delete] [Delete and Lock User]

d="abc"

dict1={d:234}

dict1[d] 并没有报错啊

庄_少强

#4 Created at ... [Delete] [Delete and Lock User]
d="abc"

dict1={d:234}

dict1[d]

对于这段,实际上是把d字符串的值“abc”作为键,而不是把d变量作为键,因此dict1={d:234}是不会报错的,赋值之后即使改变了变量d的值,也不会对dict1造成影响


  • 1

Reply