>>> from env_helper import info; info()
页面更新时间: 2023-08-25 16:07:42
运行环境:
Linux发行版本: Debian GNU/Linux 12 (bookworm)
操作系统内核: Linux-6.1.0-11-amd64-x86_64-with-glibc2.36
Python版本: 3.11.2
2.8. 分清 ==
与 is
的适用场景¶
在判断两个字符串是否相等的时候,混用is和==是很多初学者经常犯的错误,造成的结果是葙序在不同情况下表现不一。先来看一个例子:.
>>> a ="Hi"
>>> b = "Hi"
>>> a is b
True
>>> a == b#is和==结果一样
True
>>> al = "I am using long string for testing"
>>> bl ="I am using long string for testing"
>>> al is bl#is 的结采为 False
False
>>> al == bl#
True
>>> str1 = "string"
>>> str2 = "" . join(['s','t','r','i','n','g'])
>>> print (str2)
string
>>> str1 is str2
False
>>> str1 == str2 #==和is的结果在这种情况也不一样
True
造成这种奇怪现象的原因是什么呢?为什么在有些情况下is和==输出相同而在有些情况下又不相同呢?我们来分析一下:首先通过id()函数来看看这些变量在内存中具体的存储 空间f为了方便讨论问题,用表2-1来表示上例具体结果。
表2-1不同变置组id()以及is和==的求值结果
id() | is | == | |
a = “Hi”① | 14085224 | True | True |
b = “Hi”① | 14085224 | ||
a1 = “I am using long string for testing”② | 13003368 | False | True |
b1 = “I am using long string for testing”② | 14078152 | ||
str1 = “string” | 13256448 | False | True |
str2 = “” . join([‘s’,‘t’,‘r’,‘i’,‘n’,‘g’]) | 14056544 |