![Python王者归来](https://wfqqreader-1252317822.image.myqcloud.com/cover/412/31794412/b_31794412.jpg)
上QQ阅读APP看书,第一时间看更新
6-11 is或is not表达式
可以用于比较两个对象是否相同,在此所谓相同并不只是内容相同,而是指对象变量指向相同的内存,对象可以是变量、字符串、列表、元组(Tuple) (第8章介绍)、字典(Dict) (第9章介绍)。它的语法格式如下:
boolean_value = obj1 is obj2 # 对象obj1等于对象obj2会传回True boolean_value = obj1 is not obj2# 对象obj1不等于对象obj2会传回True
6-11-1 整数变量在内存地址的观察
在6-8-2节已经讲解可以使用id( )函数获得列表变量地址,其实这个函数也可以获得整数(或浮点数)变量在内存中的地址,当我们在Python程序中设立变量时,如果两个整数(或浮点数)变量内容相同,它们会使用相同的内存地址存储此变量。
程序实例ch6_44.py:整数变量在内存地址的观察,这个程序比较特别的是,程序执行初,变量x和y值是10,所以可以看到经过id( )函数后,彼此有相同的内存位置。变量z和r由于值与x和y不相同,所以有不同的内存地址,经过第9行运算后r的值变为10,最后得到x、y和r不仅值相同,同时也指向相同的内存地址。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P83_48482.jpg?sign=1738829571-GFNX0fHUMfE7f1iAP1KcrWpoAtGxDp3Z-0-f49c56007fa9bc80a06ed7867d775aec)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P83_48488.jpg?sign=1738829571-S3cDO7mOqOCPpvY9Vauq88qYxuHUYNj6-0-3f8b857821cc5f296e8fc67fb8f438cf)
当r变量值变为10时,它所指的内存地址与x和y变量相同了。
6-11-2 将is和is not表达式应用在整数变量
程序实例ch6_45.py:is和is not表达式应用在整数变量。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P84_48920.jpg?sign=1738829571-SzMfiOf6rhbVuA8wQ1RtMqhEvKsfJ86p-0-92af67a62302c9d860fe8d38f0b20a17)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P84_48926.jpg?sign=1738829571-ecVGPQHs9og4vg0EfqK8pbNqOTTd7c7P-0-d9e3dbb205c6348c32fca7823c18dc3d)
6-11-3 将is和is not表达式应用在列表变量
程序实例ch6_46.py:这个范例所使用的3个列表内容均是相同,但是mysports和sports1所指地址相同所以会被视为相同对象,sports2则指向不同地址所以会被视为不同对象,在使用is指令测试时,不同地址的列表会被视为不同的列表。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P84_48930.jpg?sign=1738829571-ywn3bzhuVdo0wwrRh35n1BldBoDsKCHY-0-05094c9a8392b724d390f187b245a24b)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P84_48936.jpg?sign=1738829571-8ZqAyZDyby9YumkdJVQ2T6BW584jipOW-0-192f9163c9b6802c4d52428e36b336f2)