扫码阅读
手机扫码阅读

Python 中 is 和 == 的区别

68 2024-07-20

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

查看原文:Python 中 is 和 == 的区别
文章来源:
咸鱼运维杂谈
扫码关注公众号
is与==的区别摘要

Python中的is==操作符都用于比较对象,但is要求对象的值和内存地址都相同,而==只需要对象的值相等。例如,使用time()方法获取的不同时间点对象值相同但内存地址不同,导致t1 == t2为True但t1 is t2为False。

Python中的小整数池涵盖了[-5, 256]的整数范围,这些数值在内存中有预分配的空间,因此多次定义的小整数对象内存地址相同。对于小整数池之外的数,它们在IDE环境或脚本模式下由于Python的缓存机制,多个变量引用同一数值不会重新开辟内存空间,但在交互模式下则不是这样。

Python的缓存机制预存储了高频使用的不可变数据类型(数字、字符串、元组)以减少内存申请和销毁的开销,因此在同一代码块中,这些数据类型的对象被多个变量引用时,不会重复开辟内存空间。然而,可变数据类型(列表、字典、集合)不遵循这一规则。

不可变数据类型中的小整数池数在交互模式下使用固定缓存。而非小整数池内的数,在IDE环境下多个变量引用同一数据时不会开辟新的内存空间,但在交互模式下,除非同时赋值或同一个局域代码块内赋值,否则会使用缓存机制。

Python中的字符串类型还采用了intern机制,即相同的字符串对象在字符串储蓄池中只保存一份,不会为新的变量开辟新的内存空间。在交互模式下,只包含字母、数字、下划线的字符串会触发intern机制,而在IDE环境或脚本模式下,长度限制(在Python 3.9中观察到没有长度限制)之内的字符串,即使包含特殊字符也会触发intern机制。

想要了解更多内容?

查看原文:Python 中 is 和 == 的区别
文章来源:
咸鱼运维杂谈
扫码关注公众号