<h2>示例</h2>
<pre><code>>>> l = [[i] for i in range(10)]
>>> l
[[0], [1], [2], [3], [4], [5], [6], [7], [8], [9]]
>>> j = list(l)
>>> j
[[0], [1], [2], [3], [4], [5], [6], [7], [8], [9]]
>>> j[0].append(343)
>>> j
[[0, 343], [1], [2], [3], [4], [5], [6], [7], [8], [9]]
>>> l
[[0, 343], [1], [2], [3], [4], [5], [6], [7], [8], [9]]
>>>
</code></pre>
<p>注意,当您在<code>j</code>中向嵌套列表追加某些内容时会发生什么情况?它还附加到<code>l</code>。</p>
<h2>解释</h2>
<p>这在你的代码中是如何体现的?发生在这里:</p>
<pre><code>myList2[index].append(myList1[account])
</code></pre>
<p>如果我们第一次看程序循环,<code>index</code>是零,而您是在内环的第一次迭代中,那么<code>myList2[0] == myList1[0] == items</code>,根据我们上面看到的例子。</p>
<p>所以你实际上是这样做的:</p>
<pre><code>items.append(myList1[account])
</code></pre>
<p>如何将列表从<code>myList1[account]</code>追加到<code>items</code>数组的最后一个位置。因此,当您打印该位置时,会遇到一个数组而不是一个值。这也意味着您在打印附加到<code>items</code>的第一个列表后会出现异常,从而导致程序崩溃。</p>
<h2>解决方案</h2>
<p>有很多方法可以修复您的代码,但最简单的方法是创建<code>myList2</code>与创建<code>myList1</code>的方法相同。</p>
<pre><code>myList1 = [[] for _ in range(accountMax+1)]
myList2 = [[] for _ in range(accountMax+1)]
</code></pre>
<p>或者</p>
<pre><code>myList2 = [x[:] for x in myList1]
</code></pre>
<p>这样,它们都是分开创造的</p>
<hr/>
<h2>更好的例子</h2>
<p>为了帮助解释我关于崩溃的观点,这里有一个程序,它的作用与OP的相同:</p>
<pre><code>>>> l = [[i] for i in range(10)]
>>> j = list(l)
>>> index = 0
>>> for items in l:
... print ('printing list')
... print (items)
... for account in items:
... print ('printing account')
... print (account)
... j[index].append(l[account])
... index = index + 1
...
printing list
[0]
printing account
0
printing account
[0, [...]]
Traceback (most recent call last):
File "<stdin>", line 7, in <module>
TypeError: list indices must be integers, not list
>>>
</code></pre>