python中,使用is比较两个字符串,为什么会出现下面的结果:
In [1]: x = 'ab'
y = 'ab'
x is y
Out[1]: True
In [2]: x = 'a123b'
y = 'a123b'
x is y
Out[2]: True
In [3]: x = 'a,b'
y = 'a,b'
x is y
Out[3]: False
In [4]: x = '#1'
y = '#1'
x is y
Out[4]: False
is 是比较两个对象的id是否相同。
当二者为整型时:如果值在 [-5, 256]之间,两个变量使用的是同一个对象池里的对象,所以地址是一样的;值超过这个范围,后者定义的时候就得新开辟一块内存来存储,地址就不一样了;
当二者为字符串时:如果值仅包含数字、字母,则二者是一致的;
当二者为字典、元组、列表时,二者是不一致的。