我有一个通过以下方式启动的二维数组,
array = [[False] * 2]] * 3
。如果我更新了值a[0][0] = True
假设的结果是:
[[True,False],[False,False],[False,False]]
然而,python解释器显示结果:
[[True,False],[True,False],[True,False]]
答案 0 :(得分:0)
基本上,您使用的语法是有效的 - 但它并不像您认为的那样。
当您使用该语法创建列表时,您实际上并没有创建唯一对象;您正在创建对同一对象的其他引用。您可以使用其任何引用更改该列表,但一旦更改,所有引用仍将指向相同(更新)的列表。为了说明这一点,请尝试以下方法:
array = [["cat"]]*3
print(array)
array[0][0] = "dog"
print(array)
第一张照片将显示[['cat'],['cat'],['cat']],根据您的预期,它应该看起来正确。但那些不是唯一的字符串。它们都是对同一个字符串的引用。所以当我们改变第一个(位于0,0)时,下一个打印给我们:[['dog'],['dog'],['dog']]
这就是它发生的原因。