zoukankan      html  css  js  c++  java
  • 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才会相等,超过了这个范围就不行了,同样的道理,字符串对象也有一个类似的缓冲池,超过区间范围内自然不会相等了。

       

       

       

       

       

       

       

       

  • 相关阅读:
    JavaScript 选取 min 到 max 之间的 length 个数字并排序
    css BFC
    css 清除浮动
    css hasLayout——IE浏览器css bug的一大罪恶根源
    css hack
    HTML React
    JavaScript 封装一些常用的函数
    dsoframer.ocx在win7下没法用
    DSO Framer ActiveX 控件
    c#读写txt文件
  • 原文地址:https://www.cnblogs.com/yifanrensheng/p/11865041.html
Copyright © 2011-2022 走看看