# 三次a引用的对象一样
>>> a = 's2@'
>>> id(a)
49220672
>>> a = a + 's'
>>> id(a)
49220672
>>> a += '@'
>>> id(a)
49220672
# 后两次a引用的对象一样
>>> a = '#$@#$@'
>>> id(a)
49220544
>>> a += '23'
>>> id(a)
49302888
>>> a = a + 'sd'
>>> id(a)
49302888
# 三次a引用的对象都不一样
>>> a = '@#$#@%'
>>> id(a)
49220608
>>> a += '^%&%&'
>>> id(a)
49302728
>>> a = a + '&^**%$^'
>>> id(a)
49296880
是什么原因导致出现三种不同的结果。
产生这个的原因是python当中的池化机制,简单的常用的较短的字符串会存在内存当中,利用内存池技术来提高性能。
具体的可以参考这个回答如何理解python中的池化