Discuss / Python / 交作业啦~

交作业啦~

Topic source

Wizology

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

a1 = (1, 2, 3) a2 = (1, [2,3])

d1 = (a1) # 通过 d2 = (a2) # TypeError: unhashable type: 'list',list是可变的,就不能作为key: s1 = set(a1) # 通过 s2 = set(a2) # TypeError: unhashable type: 'list'。

参考廖老师上节课tuple和list的课程:表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的。

Todayzhou

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

请问一下 定义dict应该是a={'test'}这种才对呀。 你写的: d1 = (a1) # 通过 d2 = (a2) # TypeError: unhashable type: 'list',list是可变的,就不能作为key: 应该不是定义一个dict吧!

sky-卤代烃

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

同意,应该用花括号

wymhuster

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

用花括号会直接判断为set

渡牙

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

为什么花括号直接判定为set ,set不是有set()来定义么

同学能解释一下为什么用花括号会判定为set?

我的理解是 用花括号判定为set是因为dict是键-值存储,{a1}只有键而没有值所以默认为set;但是楼主用圆括号也是不对的,楼主的d1、d2都是元组。


>>> a1=(1,2,3)
>>> a2=(1,[2,3])
>>> d1=(a1)
>>> d2=(a2)
>>> d1
(1, 2, 3)
>>> d2
(1, [2, 3])

定义字典:

>>> d1={a1:2}
>>> d1
{(1, 2, 3): 2}
>>> d2={a2:2}
Traceback (most recent call last):
  File "<pyshell#55>", line 1, in <module>
    d2={a2:2}
TypeError: unhashable type: 'list'



  • 1

Reply