本文共 1917 字,大约阅读时间需要 6 分钟。
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) 54565442》
>>> 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) 395283523》
>>> m=6
>>> n=9>>> m==n
False >>> m is n False >>> id(m) 5456532 >>> id(n) 54564964》
>>> l1=[2,3,4]
>>> l2=[2,3,4] >>> l1==l2 True >>> l1 is l2 False >>> id(l1) 112938960 >>> id(l2) 1129812965》
>>> a=8
>>> b=8.00 >>> a==b True >>> a is b False >>> id(a) 5456508 >>> id(b) 1053318406》
>>> 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) 1117475528》
>>> 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) 38951752is运算符是判定同一性而不是相等性。变量x和y都被绑定在同一个列表中,而z被绑定在另一个具有相同数值和顺序的列表上。
9》
>>> a=2.6 >>> b=2.6 >>> a is b False >>> id(a) 105331840 >>> id(b) 105331808
总结:is叫做同一性运算符,判断2个变量是否引用的是同一个对象,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。
==比较操作符:用来比较两个对象是否相等,value做为判断因素。
转载地址:http://ubyai.baihongyu.com/