<p><code>zip</code>做什么?你知道吗</p>
<p>引用官方文件:</p>
<blockquote>
<p>Zip returns a list of tuples, where the i-th tuple contains the i-th
element from each of the argument sequences or iterables. The returned
list is truncated in length to the length of the shortest argument
sequence.</p>
</blockquote>
<p>意思是</p>
<pre><code> >>> zip(["A", "B"], ["C", "D"], ["E", "F"])
[('A', 'C', 'E'), ('B', 'D', 'F')]
</code></pre>
<p>所以现在,当你循环时,你实际上有一个元组列表。像这样的内容。你知道吗</p>
<pre><code> # These are strings here but in your case these are objects
[('Wxh', 'dWxh', 'mWxh'), ('Whh', 'dWhh', 'mWhh'), ('Why', 'dWhy', 'mWhy'),
('bh', 'dbh', 'mbh'),('by', 'dby', 'mby')]
</code></pre>
<blockquote>
<p>What I know so far, 5 Iterations, param == Wxh on the first iteration
but not there on...</p>
</blockquote>
<p>你是对的,现在让我们来分析你的循环。你知道吗</p>
<pre><code> for param, dparam, mem in m:
print(param, dparam, mem)
# Which prints
('Wxh', 'dWxh', 'mWxh')
('Whh', 'dWhh', 'mWhh')
('Why', 'dWhy', 'mWhy')
('bh', 'dbh', 'mbh')
('by', 'dby', 'mby')
</code></pre>
<p>也就是说,在每次迭代中,<code>params</code>得到第0个索引元组值,<code>dparam</code>得到第一个,<code>mem</code>得到第二个。你知道吗</p>
<p>现在,当我在for循环的范围外键入<code>param</code>时,我得到</p>
<pre><code> >>> param
'by'
</code></pre>
<p>这意味着params仍然保留对<code>by</code>对象的引用。你知道吗</p>
<p>根据官方文件:</p>
<blockquote>
<p>The for-loop makes assignments to the variables(s) in the target
list. [...] Names in the target list are not deleted when the loop is
finished, but if the sequence is empty, they will not have been
assigned to at all by the loop.</p>
</blockquote>