擅长:python、mysql、java
<p>在第一个函数中,您将在该语句中为<code>st</code>赋值,因此它是一个全新的变量,而不是作为参数传递的变量:</p>
<pre><code>st = st[1:]
</code></pre>
<p>可以在赋值前后使用<code>id</code>进行检查:</p>
<pre><code>In [13]: def testf(st):
....: print('before: ', id(st))
....: st = st[1:]
....: print('after: ', id(st))
....:
In [14]: a = ["response", ["wis", "hello"], ["deng", "shen"]]
In [15]: id(a)
Out[15]: 85287112L
In [16]: testf(a)
('before: ', 85287112L)
('after: ', 85289480L)
</code></pre>
<p>但是在第二个函数中没有赋值,因此id保持不变。这意味着您修改了传入参数的列表:</p>
<pre><code>In [17]: def popf(st):
....: print('before: ', id(st))
....: st.pop(0)
....: print('after: ', id(st))
....:
In [18]: popf(a)
('before: ', 85287112L)
('after: ', 85287112L)
</code></pre>