Python 内部也有缓存机制。
==运算符比较两个对象的值,关注的是对象的内容,而is比较对象的标识,看的是对象的内存地址。- 在变量和单例值之间比较时,应该使用
is。目前,最常使用is检查变量绑定的值是不是 None,即x is None和x is not None。 is运算符比==速度快,因为它不能重载,所以 Python 不用寻找并调用特殊方法,而是直接比较两个整数 ID。而a==b是语法糖,等同于a.__eq__(b)。继承自 object 的__eq__方法比较两个对象的 ID,结果与is一样。但是多数内置类型使用更有意义的方式覆盖了__eq__方法,会考虑对象属性的值,如列表。相等性测试可能涉及大量处理工作,例如,比较大型集合或嵌套层级深的结构时。
字符串缓存机制:在 Python 内部,对于一些短字符串和数字,会启用缓存机制以优化性能。因为这些小型不可变对象会被频繁使用,所以 Python 预先创建并缓存了它们,以便可以多次引 l 用,而不是每次新建实例。
X = "hello"
y = "hello"
print(x is y)
#输出:True
x = "hello world"
y = "hello world""
print(x is y)#输出:False(在某些情况下可能是True,但主要取决于具体的Python实现)immutable(不可变)类型与 mutable(可变)类型:对于不可变类型如字符串、数字、元组,常常会发生对象重用,而对于可变类型如列表、字典,每次创建都是新对象。
a = 256
b = 256
print(a is b)
#输出 :True
a = 257
b = 257
print(a is b)# 输出:False(缓存范围一般是-5 到 256,这点不同版本的解释器可能有所不同)