zoukankan      html  css  js  c++  java
  • Python中is和==的区别

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

    在讲is和==这两种运算符区别之前,首先要知道Python中对象包含的三个基本要素,

    分别是:id(身份标识)、type(数据类型)和value(值)

    is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同。下面来看看具体区别在哪。

    ==比较操作符和is同一性运算符区别

    ==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等,例如下面两个字符串间的比较:

    例1.

    >>> a = 'cheesezh'
    >>> b = 'cheesezh'
    >>> a == b
    True

    is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。通过对下面几个list间的比较,你就会明白is同一性运算符的工作原理:

    例2.

    复制代码
    >>> 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
    复制代码

    前三个例子都是True,这什么最后一个是False呢?x、y和z的值是相同的,所以前两个是True没有问题。至于最后一个为什么是False,看看三个对象的id分别是什么就会明白了。

    下面再来看一个例子,例3中同一类型下的a和b的(a==b)都是为True,而(a is b)则不然。

    例3.

    >>> a = 1 #a和b为数值类型
    >>> b = 1
    >>> a is b
    True
    >>> id(a)
    14318944
    >>> id(b)
    14318944
    >>> a = 'cheesezh' #a和b为字符串类型
    >>> b = 'cheesezh'
    >>> a is b
    True
    >>> id(a)
    42111872
    >>> id(b)
    42111872
    >>> a = (1,2,3) #a和b为元组类型
    >>> b = (1,2,3)
    >>> a is b
    False
    >>> id(a)
    15001280
    >>> id(b)
    14790408
    >>> a = [1,2,3] #a和b为list类型
    >>> b = [1,2,3]
    >>> a is b
    False
    >>> id(a)
    42091624
    >>> id(b)
    42082016
    >>> a = {'cheese':1,'zh':2} #a和b为dict类型
    >>> b = {'cheese':1,'zh':2}
    >>> a is b
    False
    >>> id(a)
    42101616
    >>> id(b)
    42098736
    >>> a = set([1,2,3])#a和b为set类型
    >>> b = set([1,2,3])
    >>> a is b
    False
    >>> id(a)
    14819976
    >>> id(b)
    14822256

    通过例3可看出,只有数值型和字符串型的情况下,a is b才为True,当a和b是tuple,list,dict或set型时,a is b为False

    转自http://www.cnblogs.com/CheeseZH/p/5260560.html

  • 相关阅读:
    程序员父亲的遗产——编程十诫 转载
    如何跟程序员谈一场没有Bug的恋爱
    java集合(ArrayList,Vector,LinkedList,HashSet,TreeSet的功能详解)
    CentOS7.0下载各版本说明 新增Everything版
    Virtualbox虚拟机安装CentOS 6.5图文详细教程
    s:iterator数据累加示例代码
    关于程序员的59条搞笑但却真实无比的编程语录
    jQuery EasyUI API 中文文档
    Java发送带html标签内容的邮件
    javascript比较两个时间大小
  • 原文地址:https://www.cnblogs.com/kunpengv5/p/7811566.html
Copyright © 2011-2022 走看看