我正在尝试更改一个嵌套列表中的一个单元格,并在所有嵌套列表中更改单元格。
示例:
>>> 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']]
>>>
答案 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']]