--- title: Python Comparisons localeTitle: Python比较 --- [Python文档 - 比较](https://docs.python.org/3/library/stdtypes.html#comparisons) Python中有八个比较操作。它们都具有相同的优先级(高于布尔操作的优先级)。比较可以任意链接;例如, `x < y <= z`等效于`x < y and y <= z` ,除了`y`仅被评估一次(但在两种情况下,当`x < y`被发现为假时,根本不评估`z` )。 此表总结了比较操作: 操作|含义 \--------- | ----------------------- `<` |严格不足 `<=` |小于或等于 `>` |严格大于 `>=` |大于或等于 `==` |等于 `!=` |不等于 `is` |对象身份 `is not` |否定了对象的身份 除了不同的数字类型之外,不同类型的对象永远不会相等。此外,某些类型(例如,函数对象)仅支持简并比较概念,其中该类型的任何两个对象都是不相等的。在将复数与另一个内置数值类型进行比较时,当对象具有无法比较的不同类型时,或者在没有定义的其他情况下, `<` , `<=` , `>`和`>=`运算符将引发`TypeError`异常排序。 除非类定义`__eq__()`方法,否则类的非相同实例通常会比较为不相等。 除非该类定义了足够多的方法`__lt__()` , `__le__()` , `__gt__()`和`__ge__()` ,否则不能对相同类的其他实例或其他类型的对象排序类的实例(一般情况下) , `__lt__()`和`__eq__()`就足够了,如果你想要比较运算符的常规含义)。 `is`和`is not`运营商的行为无法定制;它们也可以应用于任何两个对象,并且永远不会引发异常。 我们还可以将`<`和`>`运算符链接在一起。例如, `3 < 4 < 5`将返回`True` ,但`3 < 4 > 5`将不返回`True` 。我们也可以链接相等运算符。例如, `3 == 3 < 5`将返回`True`但`3 == 5 < 5`将不返回`True` 。 ### 平等比较 - “是”与“==” 在Python中,有两个比较运算符允许我们检查两个对象是否相等。 `is`运算符和`==`运算符。但是,他们之间有一个关键的区别! '是'和'=='之间的关键区别可以概括为: * `is`用来比较**认同** * `==`用于比较**相等** ## 例 首先,在Python中创建一个列表。 ```python myListA = [1,2,3] ``` 接下来,创建该列表的副本。 ```python myListB = myListA ``` 如果我们使用'=='运算符或'is'运算符,两者都将产生**True**输出。 ```python >>> myListA == myListB # both lists contains similar elements True >>> myListB is myListA # myListB contains the same elements True ``` 这是因为myListA和myListB都指向同一个列表变量,我在Python程序的开头定义了该变量。两个列表在身份和内容上完全相同。 但是,如果我现在创建一个新列表怎么办? ```python myListC = [1,2,3] ``` 执行`==`运算符仍然显示两个列表在内容方面是相同的。 ```python >>> myListA == myListC True ``` 但是,执行`is`运算符现在将生成`False`输出。这是因为myListA和myListC是两个不同的变量,尽管包含相同的数据。即使它们看起来一样,但它们是**不同的** 。 ```python >>> myListA is myListC False # both lists have different reference ``` 总结一下: * 如果两个变量都指向同一个引用, `is`表达式输出为`True` * 如果两个变量包含相同的数据,则`==`表达式输出`True`