• Python中is和==的区别


    一、简介:

    Python中有很多运算符,今天我们就来讲讲is和==两种运算符在应用上的本质区别是什么。

    在讲is和==这两种运算符区别之前,首先要知道Python中对象包含的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)

    ==比较操作符和is同一性运算符区别,is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。类似于Java中的equal()和==。

    二、实验:

    >>> x = y = [4,5,6]
    >>> z = [4,5,6]
    >>> x == y
    True
    >>> x == z
    True
    >>> x is y
    True
    >>> x is z
    False
    >>>
    >>> print id(x)
    3075326572
    >>> print id(y)
    3075326572
    >>> print id(z)
    3075328140

    >>> a = 1 #ab为数值类型
    >>> b = 1
    >>> a is b
    True
    >>> id(a)
    14318944
    >>> id(b)
    14318944

    三、结论:

    1. 只要各对象的值一样,则 x == y 的值一定为True;
    2. 只有数值型和字符串型,并且在通用对象池中的情况下,a is b才为True,否则当a和b是int,str,tuple,list,dict或set型时,a is b均为False。

    四、原因:

    1. ==只比较值是否相等,is比较id是否相同。
    2. 事实上Python 为了优化速度,使用了小整数对象池,避免为整数频繁申请和销毁内存空间。而Python 对小整数的定义是 [-5, 257),只有数字在-5到256之间它们的id才会相等,超过了这个范围就不行了,同样的道理,字符串对象也有一个类似的缓冲池,超过区间范围内自然不会相等了。

       

       

       

       

       

       

       

       

  • 相关阅读:
    20201029模拟赛总结
    20201023模拟赛总结
    贪心题目选讲
    博客阅览帮助
    NTT&FFT(快速?变换,以及扩展)
    数论知识小结 [基础篇]
    数论知识小结 [微提高篇]
    零化多项式/特征多项式/最小多项式/常系数线性齐次递推
    牛顿迭代快速求解定义域为多项式的函数零点
    求导/泰勒展开
  • 原文地址:https://www.cnblogs.com/yifanrensheng/p/11865041.html
Copyright © 2020-2023  润新知