正确使用*
下面我们用一个例子来说明
输出一个井字游戏的方块,一个包含三个列表的列表,嵌套的3个列表各有3个元素。
如[[’-’,’-’,’-’],[’-’,’-’,’-’],[’-’,’-’,’-’]]
- 第一种方法:
>>>board=[['-']*3 for i in range(3)]
>>>board
>[['-', '-', '-'], ['-', '-', '-'], ['-', '-', '-']]
>>>board[1][2]='x'
>>>board
>[['-', '-', '-'], ['-', '-', 'x'], ['-', '-', '-']]
输出结果和我们预期一样
- 第二种方法:
>>>board=[['-']*3]*3
>>>board
>[['-', '-', '-'], ['-', '-', '-'], ['-', '-', '-']]
>>>board[1][2]='x'
>>>board
>[['-', '-', 'x'], ['-', '-', 'x'], ['-', '-', 'x']]
我们会发现第二种方法在赋值时出错了,究其原因是:
外面的列表其实是包含了同一个列表的引用,也就是说,三个列表存放的位置是一样的,所以才会出错。