2015-09-15 138 views
-1

我具有由下列方式启动的二维阵列,初始化一个二维阵列

array = [[False] * 2]] * 3。如果我更新值a[0][0] = True

假想的结果是:

[[True,False],[False,False],[False,False]]

但是,python解释器显示结果:

[[True,False],[True,False],[True,False]]

回答

0

基本上,你使用的语法是有效的 - 但它不会做你认为它的作用。

当您使用该语法创建列表时,实际上并未创建唯一对象;您正在创建对同一对象的其他引用。您可以使用其任何引用来更改该列表,但一旦它被更改,所有引用仍将指向相同(更新)的列表。为了说明这一点,请尝试以下操作:

array = [["cat"]]*3 
print(array) 
array[0][0] = "dog" 
print(array) 

的第一次印刷将显示[“猫”],[“猫”],[“猫”],这与预期相符,应该是正确的。但那些不是唯一的字符串。它们都是对同一个字符串的引用。所以当我们改变第一个(位于0,0)时,下一次打印给我们:[['dog'],['dog'],['dog']]

这就是为什么它发生这种情况。