擅长:python、mysql、java
<p>此行为特定于Python交互shell。如果我将以下内容放入.py文件中:</p>
<pre><code>print id('so')
print id('so')
print id('so')
</code></pre>
<p>然后执行它,我收到以下输出:</p>
<pre>
2888960
2888960
2888960
</pre>
<p>在CPython中,字符串文本被视为常量,我们可以在上面代码片段的字节码中看到:</p>
<pre><code> 2 0 LOAD_GLOBAL 0 (id)
3 LOAD_CONST 1 ('so')
6 CALL_FUNCTION 1
9 PRINT_ITEM
10 PRINT_NEWLINE
3 11 LOAD_GLOBAL 0 (id)
14 LOAD_CONST 1 ('so')
17 CALL_FUNCTION 1
20 PRINT_ITEM
21 PRINT_NEWLINE
4 22 LOAD_GLOBAL 0 (id)
25 LOAD_CONST 1 ('so')
28 CALL_FUNCTION 1
31 PRINT_ITEM
32 PRINT_NEWLINE
33 LOAD_CONST 0 (None)
36 RETURN_VALUE
</code></pre>
<p><em>相同的</em>常量(即相同的字符串对象)加载3次,因此id相同。</p>