擅长:python、mysql、java
<pre><code>for item in list:
</code></pre>
<p>这将为列表中的每个连续元素创建一个新引用(<code>item</code>)。然后将引用<code>item</code>重新绑定到其他对象,然后将该引用丢弃。你知道吗</p>
<blockquote>
<p>I know I can probably make a new list and add each item to the new
list individually, but that sounds like a lot of work and might
require twice the memory.</p>
</blockquote>
<p>过早的优化是。。一些邪恶的东西。可能不是所有的邪恶,而是其中的一部分。你知道吗</p>
<p>但说真的,临时创建一个包含3个(甚至3000个)字符串的列表的内存开销是不值得考虑的。只要列一个新的清单:</p>
<pre><code>li = ['apples', 'oranges', 'bananas']
li = [x.replace('app','spam') for x in li]
#li = ['spamles', 'oranges', 'bananas']
</code></pre>
<p>(不要给列表命名<code>list</code>,它会隐藏内置的)</p>
<p>如果你绝对要改变你的清单:</p>
<pre><code>for i,x in enumerate(li):
li[i] = x.replace('app','spam')
</code></pre>
<p>虽然这不会创建一个新的列表(暂时节省内存),但它实际上会比列表理解版本慢,所以“优化”真的没有给你带来任何好处。你知道吗</p>