最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Python中==和is有什么区别

    正文概述    2020-01-18   209

    Python中==和is有什么区别

    == 是比较两个对象的内容是否相等,即两个对象的“值”是否相等,不管两者在内存中的引用地址是否一样。

    is 比较的是两个实例对象是不是完全相同,它们是不是同一个对象,占用的内存地址是否相同。即is比较两个条件:1.内容相同。2.内存中地址相同。

    a = 10000
    b = 10000
    print(a == b)  # True
    print(a is b)  # True
    print(id(a))  # 4461408208
    print(id(b))  # 4461408208
    
    a = "hello world"
    b = "hello world"
    print(a == b)  # True
    print(a is b)  # True
    print(id(a))  # 4461408208
    print(id(b))  # 4461408208
    
    a = [11,22,33]
    b = [11,22,33]
    print(a == b)  # True
    print(a is b)  # False
    print(id(a))  # 4409720712
    print(id(b))  # 4409720776

    在上面的代码中,我们分别定义了 a 和 b 两个变量,通过输出结果可以发现当变量为字符串或数字时, is 和 == 的输出结果是一样的,当为列表时 is 和 == 结果不一样,通过打印两个变量的 id 值可以看出两个 id 值不一样,这是由于当我们创建列表 a 和 b 时,是分别开辟了两块内存来分别存储这两个变量,从表象上来看结果是一样的,但两个变量所指向的内存地址不一样,我们将上面的代码改为如下:

    1 a = [11,22,33]
    2 b = a
    3 print(a == b)  # True
    4 print(a is b)  # True
    5 print(id(a))  # 4535062408
    6 print(id(b))  # 4535062408

    在上面的代码中,我们并没有直接给变量 b 赋值,而是让 b=a,这样的话 b 和 a 就指向了同一块内存,所以 a is b 就为 True 了。

    上面的代码我是在 PyCharm 编辑器中实现的,但是在终端命令行实现的话结果却是不一样的,如下:

     1 >>> a = 10000
     2 >>> b = 10000
     3 >>> a == b
     4 True
     5 >>> a is b
     6 False
     7 >>> id(a)
     8 4360555120
     9 >>> id(b)
    10 4360555216

    相关推荐:《Python视频教程》

    当我们将 a 和 b 的值变小时,如下:

    >>> a = 100
    >>> b = 100
    >>> a == b
    True
    >>> a is b
    True
    >>> id(a)
    4357367984
    >>> id(b)
    4357367984

    造成上面的原因是因为python对小整数在内存中直接创建了一份,不会回收,所有创建的小整数变量直接从对象池中引用他即可。但是注意Python仅仅对比较小的整数对象进行缓存(范围为范围[-5, 256])缓存起来,而并非是所有整数对象。也就说只有在这个[-5,256]范围内创建的变量值使用is比较时候才会成立。

    在 PyCharm 中,当值超过 256 时 is 和 == 的输出结果仍是一样,这是因为解释器也做了一部分优化,对于数字和字符串这类变量都进行了缓存。

    我们再来看一下在终端命令行中当变量为字符串时:

     1 >>> a = "hello world"
     2 >>> b = "hello world"
     3 >>> a == b
     4 True
     5 >>> a is b
     6 False
     7 >>> id(a)
     8 4359747248
     9 >>> id(b)
    10 4361247408
     1 >>> a = "hello"
     2 >>> b = "hello"
     3 >>> a == b
     4 True
     5 >>> a is b
     6 True
     7 >>> id(a)
     8 4361199040
     9 >>> id(b)
    10 4361199040

    通过输出结果可以看出,在命令行中当变量为简单字符串时输出结果一致,否则输出结果不一致,这是由于 Python 对简单字符串对象也进行了缓存,这样做的意义是可以优化代码的运行速度,减少内存消耗。


    起源地下载网 » Python中==和is有什么区别

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元