为分配给一行值的列表列表中的元素赋值

时间:2015-10-15 19:43:00

标签: python list python-2.7

我创建了一个像这样的列表列表

In [1]: list_of_list = [ [0] * 4]* 4
In [2]: list_of_list

Out[2]: [[0, 0, 0, 0], 
         [0, 0, 0, 0], 
         [0, 0, 0, 0],
         [0, 0, 0, 0],]

当我为此list_of_list中的元素指定一个值时,它会将其分配给一列元素。

In [3]: list_of_list[2][3]
Out[3]: 0

In [4]: list_of_list[2][3] = 1

In [5]: list_of_list
Out[5]: [[0, 0, 0, 1], 
         [0, 0, 0, 1], 
         [0, 0, 0, 1], 
         [0, 0, 0, 1],]

为什么python表现得像这样?

谢谢。

1 个答案:

答案 0 :(得分:4)

此操作:

[0] * 4

创建四个零的列表。这很好,每个都是在python中按值复制的,因为小于255的数字被有效地视为“原语”。

然而,

list_of_list = [[0, 0, 0, 0]]* 4

通过引用复制列表。发生在其中一个列表中的任何内容都会发生在所有这些列表中。