擅长:python、mysql、java
<p>Python实际上在不同的上下文中对“literal”有一些定义,但是如果您只想了解基本概念:像<code>123</code>这样的数字和<code>"abc"</code>这样的字符串是文本,而像{<cd3>}这样的表达式则不是。在</p>
<p>在Java中,当您编写<code>123</code>时,它不是对Java对象的引用,而是一个“本机”整数。在Python中,它是对Python对象的引用。在</p>
<p>因为在Python中,所有的东西都是一个对象,一个整数有方法,可以被卡在集合中,等等。如果我想将<code>123</code>粘贴到列表中,我只需这样做:</p>
<pre><code>>>> my_list = list()
>>> my_list.append(123)
>>> my_list
[123]
</code></pre>
<p>如果我想使用列表中的值作为整数,我只需这样做:</p>
^{pr2}$
<p>因此,我可以像其他对象一样使用文字来编写列表显示:</p>
<pre><code>>>> my_other_list = [my_list, 2]
</code></pre>
<p>(不要问列表显示是否也是字面意思,因为这是“不同上下文的不同定义”真正重要的时候…)</p>
<hr/>
<p>值得指出的是,“所有的文字值都会导致对象的创建”,这并不是真的。一个文本<em>可能是一个新对象,但它也可能是对具有相同值的现有对象的引用。例如:</p>
<pre><code>>>> a = 3
>>> b = 3
>>> a is b
True
>>> id(a) == id(b)
True
</code></pre>
<p>(语言并不能保证这一点是正确的,但大多数Python实现通常都是这样。)</p>
<p>因此,<code>b = 3</code>并没有创建一个对象,而只是对<code>a = 3</code>中相同对象的另一个引用。(事实上,<code>3</code>很可能在查看代码之前就已经被解释器预构建和预缓存了。)</p>
<p>但是您不需要关心这个问题,因为<code>3</code>是不可变的。不管你得到的是相同的<code>3</code>对象还是不同的对象,因为除了<code>is</code>和{<cd12>},没有办法区分它们的区别。字符串、浮点数等也是如此</p>