Python中嵌套列表赋值中的错误

时间:2015-11-26 09:09:33

标签: python python-3.x

我正在尝试更改一个嵌套列表中的一个单元格,并在所有嵌套列表中更改单元格。

示例:

>>> temp_list = [['a']*2]*3
>>> temp_list
[['a', 'a'], ['a', 'a'], ['a', 'a']]
>>> temp_list[2][0] = 'b'
>>> temp_list
[['b', 'a'], ['b', 'a'], ['b', 'a']]
>>> 

2 个答案:

答案 0 :(得分:2)

我知道,这听起来不对,但是......

  

这不是一个错误,它是一个功能。

>>> [id(x) for x in temp_list]
[4473545216, 4473545216, 4473545216]

如您所见,它们都有相同的参考。因此,您需要创建列表的副本。

答案 1 :(得分:0)

在2.7中我得到了相同的行为。由*扩展产生的每个实例都引用相同的变量。

>>> temp_list = [['a']*2]*3
>>> temp_list
[['a', 'a'], ['a', 'a'], ['a', 'a']]
>>> temp_list[2][0] = 'b'
>>> temp_list
[['b', 'a'], ['b', 'a'], ['b', 'a']]
>>> temp_list[1][0] = 'c'
>>> temp_list
[['c', 'a'], ['c', 'a'], ['c', 'a']]
>>> temp_list[1][1] = 'x'
>>> temp_list
[['c', 'x'], ['c', 'x'], ['c', 'x']]

请参阅:Python initializing a list of lists