python中可hash的对象

看核心编程时候有个叫hash的东西,呵呵,打开python文档看看:

hashable(可哈希性)

An object is hashable if it has a hash value which never changes during its lifetime (it needs a __hash__() method), and can be compared to other objects (it needs an __eq__()or __cmp__() method). Hashable objects which compare equal must have the same hash value.

(如果一个对象是可哈希的,那么在它的生存期内必须不可变(需要一个哈希函数),而且可以和其他对象比较(需要比较方法).比较值相同的对象一定有相同的哈希值)

翻译的比较生硬...简单的说就是生存期内可变的对象不可以哈希,就是说改变时候其id()是不变的.基本就是说列表,字典,集合了.


写一段代码验证一下:

a= [0,0,0]
b = {1:2,'c':9}
c = set(a)
string = 'hello'

class A():
    pass
a = A()
print hash(A)
print hash(a)
print hash(string)

print hash(c)
print hash(b)
print hash(a)

可以看出列表,字典,集合是无法哈希的,因为他们在改变值的同时却没有改变id,无法由地址定位值的唯一性,因而无法哈希.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值