在线绘画网站,家在深圳我在房网信息论坛,wordpress 3源码,50强网站建设公司2.3 “is”和“”的区别
在Python编写代码时#xff0c;经常会遇到需要判断2个对象是否相等的情况#xff0c;这个时候一般就会想到使用is和#xff0c;is和好像都可以用来判断对象是否相等#xff0c;经常会傻傻分不清#xff0c;但其实这其中还是有区别的。 不过在这之…2.3 “is”和“”的区别
在Python编写代码时经常会遇到需要判断2个对象是否相等的情况这个时候一般就会想到使用is和is和好像都可以用来判断对象是否相等经常会傻傻分不清但其实这其中还是有区别的。 不过在这之前我们得先了解一些基本知识。 ①、在Python中一切皆对象比如变量、函数等都是对象。对象包含3个基本要素
id身份标识type数据类型value值 ②、在Python中根据对象的值能否原地修改分为可哈希和不可哈希。能原地修改的是不可哈希对象不能原地修改的是可哈希对象。Python常见对象(类型)哈希状态如下
对象(类型)哈希数字可哈希字符串可哈希列表不可哈希元组可哈希集合不可哈希字典不可哈希
③、在Python中变量的赋值其实就是贴标签重新赋值后并不会直接修改变量的值而是将变量重新指向新的赋值对象。关于这一点请看下面的例子
from icecream import ic
a A
b B
ic(a, id(a), id(b))
a B
ic(a, id(a))ic| a: ‘A’, id(a): 1897621655920, id(b): 1897659140592 ic| a: ‘B’, id(a): 1897659140592 ④、在Python中可哈希对象的值一样那么其标识符(id)也一样。请看下方的例子
from icecream import ic
a ABC
b ABC
ic(id(a), id(b))
ic(id(a) id(b) id(ABC))
c d DEF
ic(id(c), id(d))
ic(id(c) id(d) id(DEF))
a b c
ic(id(a), id(b), id(c))
ic(id(a) id(b) id(c))ic| id(a): 2682794608816, id(b): 2682794608816 ic| id(a) id(b) id(‘ABC’): True ic| id©: 2682822597040, id(d): 2682822597040 ic| id© id(d) id(‘DEF’): True ic| id(a): 2682822597040, id(b): 2682822597040, id©: 2682822597040 ic| id(a) id(b) id©: True 在Python中是比较操作符用来比较两个对象的值是否相等。判断时相当于调用了对象中的__eq__()方法即对象1 对象2 对象1.eq(对象2)。 而is是同一性运算符用来判断两个对象的标识符(id)是否一致。即对象1 is 对象2 id(对象1) id(对象2)。 对于可哈希对象由于值一样则标识符(id)必定一样is和的结果始终保持一致。 而对于不可哈希对象就算两个对象的值一样他们的标识符(id)也不一样。导致is和的结果不一样。如下所示
from icecream import ic
a [ABC]
b [ABC]
ic(id(a), id(b))
ic(a is b)
ic(id(a) id(b) id([ABC]))
c d [DEF]
ic(id(c), id(d))
ic(c is d)
ic(id(c) id(d) id([DEF]))
a b c
ic(id(a), id(b), id(c))
ic(a is b, b is c)
ic(id(a) id(b) id(c))ic| id(a): 1115121876032, id(b): 1115122037184 ic| a is b: False ic| id(a) id(b) id([‘ABC’]): False ic| id©: 1115122601024, id(d): 1115122601024 ic| c is d: True ic| id© id(d) id([‘DEF’]): False ic| id(a): 1115122601024, id(b): 1115122601024, id©: 1115122601024 ic| a is b: True, b is c: True ic| id(a) id(b) id©: True