说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
(简答题)如以下代码,用 is
运算符用于比较两个对象的身份,为什么执行结果中有些是 True 有些是 False。
a = [5, 200, 256, 257, 300, 500]
b = [5, 200, 256, 257, 300, 500]
for i, j in zip(a, b):
print(f'{i} is {j}:', i is j)
'''
5 is 5: True
200 is 200: True
256 is 256: True
257 is 257: False
300 is 300: False
500 is 500: False
'''
在 Python 中,is
运算符用于比较两个对象的身份,即它们在内存中的地址是否相同。这个与 ==
运算符不同,后者比较的是对象的值是否相等。你的代码输出表明了一些数字的身份相同,而其他数字则不同。原因在于 Python 对小整数(通常是 -5 到 256 之间的整数)的缓存机制。
关于 Python 的整数缓存机制,Python 对小整数(-5 到 256 之间的整数)进行缓存以提高性能。因此,当你在代码中使用这些小整数时,它们会引用相同的对象。因此,对这些整数使用 is 运算符会返回 True。对于更大的整数,每次都会创建一个新的对象,因此它们的身份不同,is 运算符会返回 False。
对于 5, 200, 和 256,这些数字在 -5 到 256 的范围内,因此它们被缓存并且引用相同的对象。
对于 257, 300, 和 500,这些数字超出了 -5 到 256 的缓存范围,每次创建它们时,都会生成新的对象实例,所以它们的内存地址不同。
总结:
注:请在 JupyterLab 或者终端下执行,VS Code 和Pycharm 可能会有自己不同的缓存机制。
查看相关链接中的知识。
(完)
更新时间:2024-08-16 23:01:27 标签:python 习题 身份 缓存