eg:
In [172]: l = True In [173]: b = True In [174]: l == b Out[174]: True In [175]: l is b Out[175]: True In [176]: l = 10 In [177]: b = 10 In [178]: l == b Out[178]: True In [179]: l is b Out[179]: True In [180]: id(l) == id(b) Out[180]: True In [181]: l = 10000 In [182]: b = 10000 In [183]: l == b Out[183]: True In [184]: l is b Out[184]: False In [202]: id(l) == id(b) Out[202]: False In [203]: hash(l) == hash(b) Out[203]: True In [204]: l = 'a'*1000 In [205]: b = 'a'*1000 In [206]: l is b Out[206]: False In [207]: id(l) == id(b) Out[207]: False In [208]: hash(l) == hash(b) Out[208]: Truepython为了优化速度,使用了小整数对象池,避免为整数频繁申请和销毁空间。而python对小整数的定义是[-5,257). 字符串对象也有一个类似的缓冲池 只有在通用对象池中的况下,整数型和字符串型a is b 才为True. 否则a和b是int、str、tuple、list、dict或set类型时,a is b 均为False.