liste 2D a un comportement bizarre lorsque vous essayez de modifier une seule valeur [double]

StackOverflow https://stackoverflow.com/questions/2739552

  •  02-10-2019
  •  | 
  •  

Question

  

Possible en double:    fonction inattendue dans une liste Python de listes

Je suis relativement nouveau pour Python et j'ai du mal à travailler avec des listes 2D.

Voici mon code:

data = [[None]*5]*5
data[0][0] = 'Cell A1'
print data

et est ici la sortie (formaté pour la lisibilité):

[['Cell A1', None, None, None, None],
 ['Cell A1', None, None, None, None],
 ['Cell A1', None, None, None, None],
 ['Cell A1', None, None, None, None],
 ['Cell A1', None, None, None, None]]

Pourquoi chaque ligne se voit attribuer la valeur?

Était-ce utile?

La solution

Cela fait une liste avec cinq références à même Liste:

data = [[None]*5]*5

Utilisez quelque chose comme ce lieu qui crée cinq listes distinctes:

>>> data = [[None]*5 for _ in range(5)]

Maintenant, il fait ce que vous attendez:

>>> data[0][0] = 'Cell A1'
>>> print data
[['Cell A1', None, None, None, None],
 [None, None, None, None, None],
 [None, None, None, None, None],
 [None, None, None, None, None],
 [None, None, None, None, None]]
scroll top