今天我对一个字符串比较感到困惑:似乎python重用了字符串(这是一个明智的做法,因为它们是不可变的)。为了检查这个事实,我做了以下事情:
>>> a = 'xxx'
>>> b = 'xxx'
>>> a == b
True
>>> a is b
True
>>> id(a)
140141339783816
>>> id(b)
140141339783816
>>> c = 'x' * 3
>>> id(c)
140141339783816
>>> d = ''.join(['x', 'x', 'x'])
>>> id(d)
140141339704576
这有点令人惊讶。一些问题:
答案 0 :(得分:0)
由于这个问题有一些赞成(尽管有些重复),我将在这里回答我原来的问题(感谢上面的评论):
为了澄清最后一点,以下片段在所有情况下都会对字符串'xxx'
进行评估,但在实习时会对它们进行不同的处理。
这是一个常量表达式:
'x' * 3
但这不是:
a = 'x'
a * 3 # this is no constant expression, so no interning can be applied.
这不是表达方式:
''.join(['x', 'x', 'x']) # this is no expression (a function is called)