如图:

In [12]: a = "abc"
In [13]: b = "abc"
In [14]: a is b
Out[14]: True
In [15]: a = "ab c"
In [16]: b = "ab c"
In [17]: a is b
Out[17]: False
In [18]: 
问题:
加一个空格就不是同一个对象这里不了解
希望懂的老哥,指导一下  :)|  |      1RedFlag2233 OP 困惑一下午了 | 
|  |      2RedFlag2233 OP 为什么我发帖总是没有人会?唉! | 
|      3gjquoiai      2018-05-21 22:20:53 +08:00 是不是同一个对象是 is 告诉你的,返回 False 就说明不是同一个了呗 | 
|  |      4RedFlag2233 OP @gjquoiai 我知道不是啊,但为什么加了一个空格就不是一个对象了? | 
|      5SimbaPeng      2018-05-21 22:26:37 +08:00 cpython 对简单的不可变对象做了优化,复用已经存在的对象,估计加了空格的字符串不在复用范围内。怎么存储是 python 解释器实现的问题,你不能把解释器的实现机制当做一个确保的事情,因为可能在下个版本的解释器、或者不同的解释器会有不同的实现方案,所以你写的代码肯定不能依赖于解释器的实现机制。 | 
|      6alvin666      2018-05-21 22:27:27 +08:00 via Android python 的一个 feature,短字符串在内存中复用,长的不复用,is 和==是不一样的,is 是看指针是否指向内存中同一位置,==是判断两个指针指向的是否相同。 | 
|  |      7cadl      2018-05-21 22:29:50 +08:00 还有类似的 ``` In [1]: a = 1 In [2]: b = 1 In [3]: a is b Out[3]: True In [4]: a = 123123123 In [5]: b = 123123123 In [6]: a is b Out[6]: False ``` | 
|      8gjquoiai      2018-05-21 22:30:06 +08:00 忘记在哪听说 cpython 会复用 3 个字母以内的字符串,不过没从文档里找到,可能源码里有吧 纠结这个有什么用么 = = | 
|      9wcsjtu      2018-05-21 22:30:19 +08:00 via Android  1 字符串池,internal 机制。看看 Python 源码解析前几章就明白了 | 
|  |      10RedFlag2233 OP @wcsjtu 好的,我去看看,谢谢老哥 | 
|  |      11zhantss      2018-05-21 23:27:52 +08:00 源代码注释里面有说到相关的,我随便找了一个好贴,Python identifiers 会作为 intern 的判断条件,空格不属于,然后另外 size 为 0 和 1 的会 intern https://github.com/wklken/Python-2.7.8/blob/master/Include/stringobject.h#L30 只能说源码实现是这样的 我测试了一下不是交互控制台执行的情况,a is b 是 True | 
|  |      12MrGba2z      2018-05-21 23:35:02 +08:00 | 
|  |      13codergrowing      2018-05-21 23:40:04 +08:00 via Android 因为 Python 的驻留( interning )机制。 对于常用字符构成的字符串( 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz ),Python 会采用驻留机制,字符串在内存中只有一份,所以 id 相等。 当你加了空格后,空格不属于驻留机制的范围,故生成了新的对象。 | 
|  |      14codergrowing      2018-05-21 23:40:45 +08:00 via Android 整数同样有驻留机制,范围是- 5 ~ 256 | 
|  |      15secsilm      2018-05-21 23:47:34 +08:00 [Why does a space affect the identity comparison of equal strings? [duplicate] ]( https://stackoverflow.com/questions/28329498/why-does-a-space-affect-the-identity-comparison-of-equal-strings) 我猜 @codergrowing 是参考了这个? | 
|  |      16codergrowing      2018-05-22 08:40:15 +08:00 via Android @secsilm 不是😂,最早看到驻留机制是在流畅的 Python 里,后来在知乎上看到有人问类似的问题就顺手写了个回答~ https://www.zhihu.com/question/266183846/answer/304087286 |