Discuss / Python / 不可变对象:指向不变与内容不变

不可变对象:指向不变与内容不变

Topic source

向阳

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

#定义元组

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则不可以。

G

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

赞!

TomYazawa

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

总结得好好,很有帮助

古德

link

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

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


  • 1

Reply