#定义元组
t1 = (1,2,3) #内容不变
t2 = (1,[2,3]) #指向不变,但内容可以发生改变
#以dict为例
d1 = {t1:1}
out: {(1, 2, 3): 1} # 创建了key为元组t1,value为1的字典
d2 = {t2:2}
TypeError: unhashable type: 'list' # 报错:list是不可使用哈希算法的类型。
这节内容提到:
要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key:
虽然t2作为tuple是不可变对象,但是这里的不可变是指“指向不变”(回顾list和tuple的内容),内容是可以发生改变的。这里为了保证Hash算法,key应同时满足内容不变和指向不变。t1是内容和指向都不变的元组,因此可以作为dict的key,而t2则不可以。
赞!
总结得好好,很有帮助
古德
赞
Sign in to make a reply
向阳
#定义元组
t1 = (1,2,3) #内容不变
t2 = (1,[2,3]) #指向不变,但内容可以发生改变
#以dict为例
d1 = {t1:1}
out: {(1, 2, 3): 1} # 创建了key为元组t1,value为1的字典
d2 = {t2:2}
TypeError: unhashable type: 'list' # 报错:list是不可使用哈希算法的类型。
这节内容提到:
虽然t2作为tuple是不可变对象,但是这里的不可变是指“指向不变”(回顾list和tuple的内容),内容是可以发生改变的。这里为了保证Hash算法,key应同时满足内容不变和指向不变。t1是内容和指向都不变的元组,因此可以作为dict的key,而t2则不可以。