今天在练习时碰到一道题:
a = [1,2,3]
b = a
c = [1,2,3]
#分别用’==‘和’is'对‘a'和'c’进行运算,会得到什么结果?
测试一下
>>>print (a == b)
True
>>>print (a is b)
True
>>>print (a == c)
True
>>>print (a is c)
False
这是为什么呢?
原来,‘==’是比较运算符,判断两边的值是否相等,而‘is'是恒等(有的地方叫同一性运算符),判断的是对象间的唯一身份标识(id),通过下面的代码进行验证:
>>> print (id(a))
2062234790664
>>> print (id(b))
2062234790664
>>> print (id(c))
2062234790600
从中也可以学到将一个变量赋的值给另一个变量时,是将第一个变量的id赋给第二个变量。
问题又来了,是所有的运算对象都是这个结果吗?
>>> a = 1 #a和b为数值类型
>>> b = 1
>>> a is b
True
>>> a = 'fish' #a和b为字符串类型
>>> b = 'fish'
>>> a is b
True
>>> id(a)
>>> id(b)
>>> a = (1,2,3) #a和b为元组类型
>>> b = (1,2,3)
>>> a is b
False
>>> a = [1,2,3] #a和b为list类型
>>> b = [1,2,3]
>>> a is b
False
>>> a = {'fish':1,'cat':2} #a和b为dict类型
>>> b = {'fish':1,'cat':2}
>>> a is b
False
>>> a = set([1,2,3])#a和b为set类型
>>> b = set([1,2,3])
>>> a is b
False
通过上例可看出,只有数值型和字符串型的情况下,a is b才为True,当a和b是tuple,list,dict或set型时,a is b为False
网友评论