python - is 和 ==

Python中对象包含的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)
==比较操作符
is同一性运算符

1. ==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等
2. is被叫做同一性运算符,is 比较两个对象的 id 值是否相等,是否指向同一个内存地址
3. 两个变量a和b,值相同,数值型和字符串型的情况下,a is b才为True,当a和b是tuple,list,dict或set型时,a is b为False(参看下面例一)
4. Python会对比较小的整数对象进行缓存,下次用的时候直接从缓存中获取,所以is 和 == 的结果可能相同;小整数对象[-5,256]在全局解释器范围内被放入缓存供重复使用(参看下面例二)

注意,Python仅仅对比较小的整数对象进行缓存(范围为范围[-5, 256])缓存起来,而并非是所有整数对象。需要注意的是,这仅仅是在命令行中执行,而在Pycharm或者保存为文件执行,结果是不一样的,这是因为解释器做了一部分优化。

5.切片,切片拷贝是浅拷贝,列表中的元素不会重新创建(参看下面例三)
例一:同一类型下的a和b的(a==b)都是为True,而(a is b)则不然
>>> a = 1 #a和b为数值类型
>>> b = 1
>>> a is b
True
>>> id(a)
14318944
>>> id(b)
14318944
>>> a = 'cheesezh' #a和b为字符串类型
>>> b = 'cheesezh'
>>> a is b
True
>>> id(a)
42111872
>>> id(b)
42111872
>>> a = (1,2,3) #a和b为元组类型
>>> b = (1,2,3)
>>> a is b
False
>>> id(a)
15001280
>>> id(b)
14790408
>>> a = [1,2,3] #a和b为list类型
>>> b = [1,2,3]
>>> a is b
False
>>> id(a)
42091624
>>> id(b)
42082016
>>> a = {'cheese':1,'zh':2} #a和b为dict类型
>>> b = {'cheese':1,'zh':2}
>>> a is b
False
>>> id(a)
42101616
>>> id(b)
42098736
>>> a = set([1,2,3])#a和b为set类型
>>> b = set([1,2,3])
>>> a is b
False
>>> id(a)
14819976
>>> id(b)
14822256
例二:Python会对比较小的整数对象进行缓存,下次用的时候直接从缓存中获取,所以is 和 == 的结果可能相同
>>> a = 32
>>> b = 32
>>> a is b
True

>>> a = 257
>>> b = 257
>>> a is b
False
>>> a = -5
>>> b = -5
>>> a is b
True
>>> a = -6
>>> b = -6
>>> a is b
False
例三:切片拷贝是浅拷贝,列表中的元素不会重新创建
>>> a = 'abc'
>>> b = a[:]
>>> a is b
True

参考并感谢
参考并感谢

猜你喜欢

转载自blog.csdn.net/wang725/article/details/81269398