由于哈希冲突,不同值的对象也可能具有相同的哈希值。这是为什么呢?今天番茄加速就来分析一下。
字符串驻留
In [1]: a = ‘something’
…: b = ‘some’+‘thing’
…: id(a)==id(b)
Out[1]: True
如果上面例子返回True,但是下面例子为什么是False:
In [1]: a = ‘@zglg.com’
In [2]: b = ‘@zglg’+’.com’
In [3]: id(a)==id(b)
Out[3]: False
这与Cpython 编译优化相关,行为称为字符串驻留,但驻留的字符串中只包含字母,数字或下划线。
相同值的不可变对象
In [5]: d = {}
…: d[1] = ‘java’
…: d[1.0] = ‘python’
In [6]: d
Out[6]: {1: ‘python’}
### key=1,value=java的键值对神器消失了
In [7]: d[1]
Out[7]: ‘python’
In [8]: d[1.0]
Out[8]: ‘python’
这是因为具有相同值的不可变对象在Python中始终具有相同的哈希值
由于存在哈希冲突,不同值的对象也可能具有相同的哈希值。
对象销毁顺序
创建一个类SE:
<