Python避免使用“is”操作符比较integer数据

Python的is操作符实际上是比较的是对象的id值,id(obj)。

a is b

实际可以理解为

id(a) == id(b)

Python里保存了一个整型数组作为缓存,范围为-5到256,如果使用此范围的数据赋值,那么实际使用引用此数组的数据,所以获取这些范围数据的id值,同一个数是相同的。

Python3.6

>>>a=-5
>>>id(a)
1782077072
>>>b=-5
>>>id(b)
1782077072
>>>a=-6
>>>id(a)
42132128
>>>b=-6
>>>id(b)
42132144

可见a和b为-5时,id值同等,当a和b为-6时,id值是不想等的。

所以,比较两个整型需要避免使用is操作符,应该使用==或!=。

参考: Plain Integer Objects

版权声明:著作权归作者所有。

相关推荐

Linux使用halt命令关闭运行中操作系统

halt命令用来关闭正在运行的Linux操作系统。halt命令会先检测系统的runlevel,若runlevel为0或6,则关闭系统,否则即调用shutdown来关闭系统。 语法 halt [-n] [-w] [-d] [-f] [-i] [-p] 选项说明 -d:不要在wtmp中记录;-f:不论目前的runlevel为何,不调用shutdown即强制关闭系统;-i:在halt之前,关闭全部的

动态加载JS文件,避免Error : xxx is undefined

我们可以在页面动态添加<script>标签来动态加载js文件:function loadScript(url){ var head = document.getElementsByTagName('head')[0]; var script = document.createElement('script'); script.type = 'text/javascript'

Python比较字典的巧妙方法

Python里比较两个字典,可以比较两个字典有多少个是相同的键值对的。示例:>>> x = dict(a=1, b=6,c=3) >>> y = dict(a=2, b=2) >>> shared_items = set(x.items

Python:有关IntEnum类型的比较

枚举类型的使用请参考:Python3.4 枚举类型的使用。我们在使用Enum定义枚举类型,枚举的成员不是整型,所以在做比较时不能使用如大于号(">"),小于号(“<”)作比较。只用做相等性比较。但直接和整型做相等比较,结果都为False。Python新增了IntEnum,IntEnum是允许和整型做比较,包括大小比较和值得相等比较。创建IntEnum定义I

Java 8双冒号::方法引用操作符

Java 8中,双冒号::称为方法引用操作符,我们可以使用它来引用类的方法。::引用类的方法,返回一个函数接口(function interface),这等同于lambda表达式,但与lambda表达式不同的是,lambda表达式需要自定义一个lambda body,而::引用的是一个方法。简单地说函数接口,就是只拥有一个抽象方法的接口,如Runnable。::引用方

Kotlin:数组的基本操作

Kotlin使用Array类来表示数组,构造函数为:<init> Array(size: Int, init: (Int) -> T) size:数组大小init:初始化数组创建数组Kotlin提供了几种方法方便我们创建数组,包括:构造函数,标准库提供的arrayOf, arrayOfNulls 和emptyArray等 。构造函数// 创建 一个值