博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python is 同一性运算符
阅读量:4171 次
发布时间:2019-05-26

本文共 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)
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做为判断因素。

转载地址:http://ubyai.baihongyu.com/

你可能感兴趣的文章
python切片操作
查看>>
python 中的split()函数和os.path.split()函数
查看>>
python 矩阵转置
查看>>
python 使用zip合并相邻的列表项
查看>>
python iter( )函数
查看>>
Python 迭代器(iterator)
查看>>
Python enumerate类
查看>>
leetcode 99 Recover Binary Search Tree (python)
查看>>
linux echo 向文件中追加信息
查看>>
区块链问与答
查看>>
css常用小知识点
查看>>
js常用小知识点
查看>>
Java常用小知识点
查看>>
Java小知识点之lambda
查看>>
开源Java诊断工具Arthas简单使用说明
查看>>
深入理解Mysql索引底层数据结构与算法(二)
查看>>
IDEA自动去掉无用的import
查看>>
js数字转换成汉字
查看>>
MySQL不同存储引擎底层真正存储结构
查看>>
MySQL存储引擎底层常见面试题
查看>>