python is 同一性运算符

Python中的对象包含三要素:id、type、value。其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值。is判断的是a对象是否就是b对象,是通过id来判断的。

(obj1 is obj2) 等价于 (id(obj1) == id(obj2))

==判断的是a对象的值是否和b对象的值相等,是通过value来判断的。看下面的例子:

1》

>>> a=b=5
>>> c=5

# ==是通过value来判断
>>> a==b
True
>>> a==c
True
>>> b==c
True

# is是通过id来判断
>>> a is b
True
>>> a is c
True
>>> b is c
True
>>> id(a)
5456544
>>> id(b)
5456544
>>> id(c)
5456544

2》

>>> s1='abc'
>>> s2='abc'

>>> s3='abcd'

>>> s1==s2

True
>>> s3==s1
False
>>> s1 is s2
True
>>> id(s1)
5659344
>>> id(s2)
5659344
>>> s1 is s3
False
>>> id(s3)
39528352

3》

>>> m=6
>>> n=9

>>> m==n
False
>>> m is n
False
>>> id(m)
5456532
>>> id(n)
5456496

4》

>>> l1=[2,3,4]
>>> l2=[2,3,4]
>>> l1==l2
True
>>> l1 is l2
False
>>> id(l1)
112938960
>>> id(l2)
112981296

5》

>>> a=8
>>> b=8.00
>>> a==b
True
>>> a is b
False
>>> id(a)
5456508
>>> id(b)
105331840

6》

>>> a=8
>>> b=8
>>> a==b
True
>>> a is b
True
>>> id(a)
5456508
>>> id(b)
5456508

>>> m=123456789
>>> n=123456789
>>> m is n
False
>>> id(m)
109922620
>>> id(n)
109921164

解释器在对值很小的int做了一点小优化,只分配了一个对象(内存中只存储一个8,a和b均指向它),让它们id一样了。

当int值很大时,分配了2个对象,m和n分别指向这2个对象,id不一样。

7》

>>> d={'a':1,'b':2}
>>> d1={'a':1,'b':2}
>>> d2=d.copy()
>>> d==d1
True
>>> d==d2
True
>>> d1==d2
True
>>> d is d1
False
>>> d is d2
False
>>> d1 is d2
False
>>> id(d)
113764944
>>> id(d1)
113764800
>>> id(d2)
113764656


>>> d1=d2=d3={'a':1}
>>> d1==d2
True
>>> d2==d3
True
>>> d1 is d2
True
>>> d2 is d3
True
>>> d3 is d1
True
>>> id(d1)
111747552
>>> id(d2)
111747552
>>> id(d3)
111747552

8》

>>> x=y=[1,2,3]
>>> z=[1,2,3]
>>> x==y
True
>>> x==z
True
>>> y==z
True
>>> x is y
True
>>> x is z
False
>>> y is z
False
>>> id(x)
112938800
>>> id(y)
112938800
>>> id(z)
38951752

is运算符是判定同一性而不是相等性。变量x和y都被绑定在同一个列表中,而z被绑定在另一个具有相同数值和顺序的列表上。

9》

>>> a=2.6
>>> b=2.6
>>> a is b
False
>>> id(a)
105331840
>>> id(b)
105331808

总结:is叫做同一性运算符,判断2个变量是否引用的是同一个对象,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。

==比较操作符:用来比较两个对象是否相等,value做为判断因素。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值