擅长:python、mysql、java
<p>让我们看看您的代码,但是首先,我们将把函数声明模式化到顶部,这样执行顺序就更清楚了。在</p>
<pre><code>def keeps(x):
y = x[:] #Here you are creating a modifiable copy of the original x list and referencing it with y
y[1] = 2
return y
def changes(x):
y = x # Here you are just referencing x itself with a new name y
y[1] = 2
return y
a = [1,1,1]
aout = keeps(a)
print(a, aout)
aout = changes(a)
print(a, aout)
</code></pre>
<p>基本上,如果你只是给一个列表分配另一个变量名,你就给了同一个对象两个名字,所以内容的任何变化都可能影响到这两个“列表”。当您使用<code>y = x[:]</code>时,实际上是通过列表切片在内存中创建<code>x</code>列表的一个新副本,并将新变量名<code>y</code>分配给该列表的新副本。在</p>