-1
我具有由下列方式启动的二维阵列,初始化一个二维阵列
array = [[False] * 2]] * 3
。如果我更新值a[0][0] = True
假想的结果是:
[[True,False],[False,False],[False,False]]
但是,python解释器显示结果:
[[True,False],[True,False],[True,False]]
我具有由下列方式启动的二维阵列,初始化一个二维阵列
array = [[False] * 2]] * 3
。如果我更新值a[0][0] = True
假想的结果是:
[[True,False],[False,False],[False,False]]
但是,python解释器显示结果:
[[True,False],[True,False],[True,False]]
基本上,你使用的语法是有效的 - 但它不会做你认为它的作用。
当您使用该语法创建列表时,实际上并未创建唯一对象;您正在创建对同一对象的其他引用。您可以使用其任何引用来更改该列表,但一旦它被更改,所有引用仍将指向相同(更新)的列表。为了说明这一点,请尝试以下操作:
array = [["cat"]]*3
print(array)
array[0][0] = "dog"
print(array)
的第一次印刷将显示[“猫”],[“猫”],[“猫”],这与预期相符,应该是正确的。但那些不是唯一的字符串。它们都是对同一个字符串的引用。所以当我们改变第一个(位于0,0)时,下一次打印给我们:[['dog'],['dog'],['dog']]
这就是为什么它发生这种情况。