测试相等性
is和==一样吗?
![358e4c3c4656c08c6f44b36026a0649f.png](https://i-blog.csdnimg.cn/blog_migrate/293ecf783f7dbad2b347992edeb43755.jpeg)
·“==”操作符测试值的相等性。Python运行相等测试,递归地比较所有内嵌对象。
·"is"表达式测试对象的一致性。Python测试二者是否是同一个对象(也就是说,在同一个内存地址中)
在上一个例子中,L1和L2通过了“==”测试(他们的值相等,因为它们的所有内容都是相等的),但是is测试却失败了(它们是两个不同的对象,因此有不同的内存区域)。
再来看一个有趣的例子?
![cf4dbaa83bb251abd35c90d2692d14bf.png](https://i-blog.csdnimg.cn/blog_migrate/4cf2e3629e6e43df29c4a5e5dc64fbd2.jpeg)
![f30dfb3ff19026f1ec2ec7b734601bb6.png](https://i-blog.csdnimg.cn/blog_migrate/ce433b86b2a58b2aa67373647d3628c4.jpeg)
为什么同样是字符串,is比较却不同呢?
因为在Python内部暂时储存并重复使用短字符串作为最佳化,事实上内存里只有一个字符串'spam'供S1和S2分享。而长字符串则像列表一样分配一块新的内存空间。
python中的比较
所有的Python对象也可以支持比较操作。Python的比较总是检查复合对象的所有部分,直到可以得出结果为止。事实上,当嵌套对象存在时,Python能够自动遍历数据结构,并从左到右递归地应用比较,要多深就走多深。过程中首次发现的差值将决定比较的结果。
![9d3ecb7f81396880574e2163873b2271.png](https://i-blog.csdnimg.cn/blog_migrate/8eecd194f501702f16a32937ac7dbb0c.jpeg)
因为嵌套的3大于2,这里的L1大于L2。
一般来说,Python中不同的类型的比较方法如下:
·数字通过相对大小进行比较。
·字符串是按照字典顺序,一个字符接一个字符地对比进行比较("abc"<"ac")。
·列表和元组从左到右对每部分的内容进行比较。
但是在Python3.0以上版本不再支持非数字的混合类型比较,也不支持字典比较,不过字典的比较可通过items方法比较。
![6b797335a9b1263045c37be1f0d3e3ea.png](https://i-blog.csdnimg.cn/blog_migrate/3c845f235cd865c7cccc8cb839f6dd0e.jpeg)
真与假
在Python中,与大多数程序设计语言一样,整数0代表假,整数1代表真。不过,除此之外,Python也把任意的空数据结构视为假,把任何非空数据结构视为真。更一般地,真和假的概念是Python中每个对象的固有属性:每个对象不是真就是假,如下所示:
·数字如果非零,则为真。
·其他对象如果非空,则为真。
![151a85ab44213f8696e754d2f3afba7d.png](https://i-blog.csdnimg.cn/blog_migrate/e67762a0895227e83170380ce608446d.jpeg)
你可以简单的用bool函数判断一个对象为真为假。
![649255226664527db13c09ef9b30761a.png](https://i-blog.csdnimg.cn/blog_migrate/12e3c0f26bc9b9d1e2cc85f799089c9a.jpeg)
判断是否为同一对象
![94d78222137dfe910cd5e438af797395.png](https://i-blog.csdnimg.cn/blog_migrate/6ff8e416f8cfff25ad548ce951e19765.jpeg)