擅长:python、mysql、java
<p>初始化二维列表</p>
<p>虽然这可以安全地初始化列表:</p>
<pre><code>lst = [0] * 3
</code></pre>
<p>对于二维列表(列表列表),同样的技巧不起作用:</p>
<pre><code>>>> lst_2d = [[0] * 3] * 3
>>> lst_2d
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> lst_2d[0][0] = 5
>>> lst_2d
[[5, 0, 0], [5, 0, 0], [5, 0, 0]]
</code></pre>
<p>运算符*复制其操作数,用[]构造的重复列表指向同一列表。正确的方法是:</p>
<pre><code>>>> lst_2d = [[0] * 3 for i in xrange(3)]
>>> lst_2d
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> lst_2d[0][0] = 5
>>> lst_2d
[[5, 0, 0], [0, 0, 0], [0, 0, 0]]
</code></pre>