dan*_*ast 6 python string python-internals
今天我被一个字符串比较困惑:似乎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
Run Code Online (Sandbox Code Playgroud)
这有点令人惊讶.一些问题:
由于这个问题有一些赞成票(尽管有点重复),我将在这里回答我原来的问题(感谢上面的评论):
为了澄清最后一点,以下代码片段在所有情况下都会评估 string 'xxx',但在实习方面它们的处理方式有所不同。
这是一个常量表达式:
'x' * 3
Run Code Online (Sandbox Code Playgroud)
但这不是:
a = 'x'
a * 3 # this is no constant expression, so no interning can be applied.
Run Code Online (Sandbox Code Playgroud)
这不是表达:
''.join(['x', 'x', 'x']) # this is no expression (a function is called)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1051 次 |
| 最近记录: |