栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python中几个容易混淆的概念(==,is,type,isinstance)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python中几个容易混淆的概念(==,is,type,isinstance)

1、“==”是比较对象的值是否相同
>>> a = 1
>>> b = 1
>>> print(a == b)
True
2、"is"是判断参与比较的两个对象是否为同一个(地址是否相同)
>>> a = 12345
>>> b = 12345
>>> print(a is b)
False

a和b的值都是12345,但属于不同的对象。因此使用"is"判断时,返回False。这里,我们可以进一步通过id()这个函数查看a和b对应值的地址。

>>> a = 12345
>>> b = 12345
>>> print(id(a))
2281569830096
>>> print(id(b))
2281569830960

然而,事情并没有那么简单。如果我们尝试将a和b的值换成一个小一点的数,会发现他们指向的对象居然是同一个。

>>> a = 1
>>> b = 1
>>> print(a is b)
True
>>> print(id(a), id(b))
140735729531968 140735729531968

 这是因为,python处于性能的考虑,将我们经常使用的一些整数和字符做了处理,即不管你创建多少个整数1,其实都是指向同一个。这样就节约了内存。

就当我们以为这个问题已经结束时,你愉快地打开pycharm(其他工具没试过),输入代码。你会发现出现又出现违反规律的结果。不是说只针对小整数和短字符做特殊处理吗?怎么12345也只创建一个对象呢。原因在于,python处于性能考虑,特殊处理了一些小整数和段字符;同样,pycharm也会出于性能考虑,对更多的情况做特殊处理。

后面说的这些特殊情况,其实和中心思想并不违背。即"is"是判断对象是否为同一个,如果觉得迷糊,记住这一个结论就行。

                                           

3、"type" 返回对象对应的类(直接)
class A:
    pass


class B(A):
    pass


b = B()

print(type(b) is B)
# type只会往上查询一级
print(type(b) is A)

# True
# False

虽然B类继承了A类,但是type只会往上查询一级。如果想一查到底,只要有一丝联系就返回True。那就要使用isinstance

4、"isinstance" 按照mro顺序查询继承关系
class A:
    pass


class B(A):
    pass


b = B()

print(isinstance(b, B))
print(isinstance(b, A))

# True
# True

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/966153.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号