龙空技术网

Python中is和==是两种不同的写法?两者之间有什么区别?

编程liyi 206

前言:

此刻小伙伴们对“pythonis”大概比较关注,朋友们都想要了解一些“pythonis”的相关文章。那么小编同时在网上汇集了一些关于“pythonis””的相关知识,希望你们能喜欢,你们一起来了解一下吧!

今天小编给大家介绍一下Python视频教程之is和= =的区别是什么?首先在Python中一切都是对象,Python中对象包含的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)。对象之间比较是否相等可以用= =,也可以用is。目前is和= =都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同。下面来看看具体区别在哪?

似乎PYTHON在给不同的变量赋相同整数值小于等于256时,是用了同一个ID的。大于等于257的整数时,用的是不同的id,这时候就有区别了。

Python中的对象包含三要素:id、type、value

其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值

is判断的是a对象是否就是b对象,是通过id来判断的

==判断的是a对象的值是否和b对象的值相等,是通过value来判断的

如下代码或许可以帮助你理解。

>>> a = 1

>>> b = 1.0

>>> a is b

False

>>> a == b

True

>>> id(a)

12777000

>>> id(b)

14986000

>>> a = 1

 is比较的是两个对象的id值是否相等,也就是比较两个对象是否为同一个实例对象,是否指向同一个内存地址。

  = =比较的是两个对象的内容是否相等,默认会调用对象的__eq__()方法。

  以下代码在Python3.5下测试通过。

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

  = =是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等。

  >>> a = [1, 2, 3]

  >>> b = a

  >>> b is a

  True

  >>> b = = a

  True

  >>> b = a[:]

  >>> b is a

  False

  >>> b == a

  True

  is也被叫做同一性运算符,也就是id是否相同。看下面代码, a和b变量的id不同, 所以b==a是True, b is a 是False.

  >>> id(a)

  4364243328

  >>>

  >>> id(b)

  4364202696

 什么情况下is和==结果是完全相同的?

  >>> a = 256

  >>> b = 256

  >>> a is b

  True

  >>> a == b

  True

  >>>

  >>> a = 1000

  >>> b = 10**3

  >>> a = = b

  True

  >>> a is b

  False

  >>>

  结论:数字类型不完全相同。

  为什么256时相同, 而1000时不同?因为出于对性能的考虑,Python内部做了很多的优化工作,对于整数对象,Python把一些频繁使用的整数对象缓存起来,保存到一个叫small_ints的链表中,在Python的整个生命周期内,任何需要引用这些整数对象的地方,都不再重新创建新的对象,而是直接引用缓存中的对象。Python把这些可能频繁使用的整数对象规定在范围[-5, 256]之间的小对象放在small_ints中,但凡是需要用些小整数时,就从这里面取,不再去临时创建新的对象。

好了,以上就是小编给大家带来的全部内容,转发此文+关注 并私信小编“资料”即可免费领取2019最新python资料和零基础入门教程,不定期分享干货,欢迎初学和进阶中的小伙伴!

标签: #pythonis