当前位置: 首页 > 工具软件 > python-saml > 使用案例 >

python篇 “is“和“==“

艾仲渊
2023-12-01

1.两者区别

1.1.概念

在python中"is"和"=="都可用来判断变量,刚开始学的时候很容易弄晕,一会儿is满足,一会儿不满足,搞不清该怎么用,所以这里做个小结。

is判断两个变量内存地址是否相同
==用来比较两个变量的值是否相等

1.2.演示

首先我们先了解一下如何用全局函数id()查看内存地址

>>> num1 = 10000   #==判断的就是这个
>>> num2 = 20000   #==判断的就是这个
>>> id(num1)
830607078544   #is判断的就是这个
>>> id(num2)
830607077808   #is判断的就是这个

我们可以看见其内存地址和值两者都不一样,所以理所应当的is和==判断都为false

>>> num1 == num2
False
>>> num1 is num2
False

心急的小盆友就要说了,这不就是一个意思吗?别急,我们看下下面这种情况

>>> num1 = 10000
>>> num2 = 10000
>>> num1 is num2
False
>>> num1 == num2
True

没错,内存地址和值并不是一个概念,正常情况下,内存地址和值是分开,这也就is和==必须区分使用的原因。

>>> id(num1)
799191566992
>>> id(num2)
799191567184

接下来还有种情况,应该也是看这篇博客的朋友最关心的情况,为什么,我赋值一样时,它们的内存地址也是一样。

>>> num1 = 1
>>> num2 = 1
>>> id(num1)
799186381104
>>> id(num2)
799186381104
>>> num1 is num2
True
>>> num1 == num2
True

要讲清楚这点,就需要隆重介绍我们的缓存区概念了

2.缓存区概念

我们知道在存储数据时是会耗费内存资源的,而一些经常反复用的数据,如果每次单独给它们分配空间的话,就会显得冗余,耗费内存资源也非常大,进而影响程序执行的效率,解决的方案能就是提前存储好一些常用数据,然后使用指针,把它们重复使用,例如在给一个变量赋值时假如赋给它的值是缓存区的数据,就不单独分配空间了,而是直接把缓存区里已经存好数据的内存地址给它,而存放着这些常用数据的区域就是缓存区了。

2.1数据区

python缓存区中有一个数据区,数据区存的都是常量、固定不变的值、缓存数据等等,python中有一个小整型缓存区(-5~256),当变量的取值在这个小整型缓存区范围内,就不会再内存中开辟新的空间进行存储。

2.2.字符串区

除了小整型缓存区还有字符串缓存区,但是不能包含特殊字符

2.3.演示


>>> a = 10
>>> b = 10
>>> a == b
True
>>> a is b



>>> s = "hello"
>>> ss = "hello"
>>> s is ss
True
>>> s = "*hello"
>>> ss = "*hello"
>>> s == ss
True
>>> s is ss
False
>>>

 类似资料: