擅长:python、mysql、java
<p>最一般的答案是使用<a href="http://docs.python.org/3.3/library/stdtypes.html#mutable-sequence-types" rel="noreferrer">^{<cd1>}</a>和<a href="http://www.youtube.com/watch?v=pShL9DCSIUw" rel="noreferrer">generator expression</a>:</p>
<pre><code>l.extend(generate_value() for _ in range(n))
</code></pre>
<p>这将添加一个值<code>n</code>次。请注意,这将每次评估<code>generate_value()</code>其他答案可能具有的可变值的单步执行问题:</p>
<pre><code>>>> [[1]] * 5
[[1], [1], [1], [1], [1]]
>>> _[0].append(1)
>>> _
[[1, 1], [1, 1], [1, 1], [1, 1], [1, 1]]
>>> [[1] for _ in range(5)]
[[1], [1], [1], [1], [1]]
>>> _[0].append(1)
>>> _
[[1, 1], [1], [1], [1], [1]]
</code></pre>
<p>当使用乘法方法时,最终得到一个对同一个列表的n个引用的列表。当你改变它时,你会看到列表中每个元素的变化——因为它们都是一样的。</p>
<p>当使用生成器表达式或列表理解时,将为每个子项创建一个新列表,因此每个项都是不同的值。修改一个只影响那个。</p>
<p>显然,在您的示例中,值是不可变的,所以这无关紧要——但对于不同的情况,或者如果值<em>可能不</em>是不可变的,则值得记住。</p>