python中的is和==

is和==
Python中的对象包含三要素:id、type、value
id方法的返回值就是对象的内存地址
其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值
is 判断的是a对象是否就是b对象,是通过id来判断的
== 判断的是a对象的值是否和b对象的值相等,是通过value来判断的

但是为了提高内存利用效率对于一些简单的对象,如一些数值较小的int对象,python采取重用对象内存的办法,

如指向a=2,b=2时,由于2作为简单的int类型且数值小,python不会两次为其分配内存,而是只分配一次,然后将a与b同时指向已分配的对象:

>>> a=2
>>> b=2
>>> a is b
True


如果赋值的不是2而是大的数值,情况就跟前面的一样了:

>>> a=5555
>>> b=5555
>>> a is b
False
>>> id(a)
12464372
>>> id(b)
12464396

 

python中的is和==

下面又是什么原因呢

1、是py模块文件,在同一个模块内,相同的常量对象只分配一个存储单元
2、是python解释器,这个才有-5~257 的小数优化

python中的is和==

 python中的is和==