由于哈希冲突,不同值的对象也可能具有相同的哈希值

本文探讨了Python中由于哈希冲突导致的不同值对象可能具有相同哈希值的现象,包括字符串驻留机制、相同值的不可变对象、对象销毁顺序、for循环的工作原理以及生成器表达式的执行时机。通过对这些概念的深入理解,有助于提升对Python语言特性的掌握。
摘要由CSDN通过智能技术生成

由于哈希冲突,不同值的对象也可能具有相同的哈希值。这是为什么呢?今天番茄加速就来分析一下。在这里插入图片描述

字符串驻留

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:

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值