Il y a deux exemples, le premier est le suivant,
a=[0]*5
for i in range(5):
a[0]=i+3
À ce moment, a=[3,4,5,6,7]
Le deuxième est le suivant :
a=[[0,0]]*5
for i in range(5):
a[0]=i+3
À ce moment, a=[[7, 0], [7, 0], [7, 0], [7, 0], [7, 0]]
Pourquoi cela se produit-il ? Y a-t-il un problème avec ma deuxième façon d'écrire ?
Débutants, donnez-moi quelques conseils !
Vous avez posé deux problèmes ici :
Le premier, comme mentionné ci-dessus, vous avez modifié la valeur de a[0], mais vous n'avez pas écrit la modification
i
放入列表去处理, 或者说, 你漏了把i
dans le code de la question :Méthode correcte :
La deuxième question, qui est celle que vous avez posée ci-dessus, est de savoir pourquoi la méthode de définition de
La deuxième étape est la suivante : s'il est généré à l'aide de la listea=[[0,0]]*5
s'avère être entièrementa=[[ 7, 0], [7, 0], [7, 0], [7, 0], [7, 0]]
a=[[0,0]]*5
这种定义方法, 结果出来发现全部都是a=[[7, 0], [7, 0], [7, 0], [7, 0], [7, 0]]
这个问题和第一个问题有个相同之处, 就是你应该是忘了写
a[i][0] = i + 3
,其次就是: 如果用
[[0, 0]] * 5
Cette question est similaire à la première question, c'est-à-dire que vous devriez avoir oublié d'écrirea[i][0] = i + 3
,[[0, 0]] * 5
, tout ce qui est dans c'est une référence, ce sont tous le même objet, pas 5 objets Voir exemple :id
值看到, 他们都是一样的地址, 所以列表中的5个对象, 全是同一个, 所以当你执行a[i][0]= i+3
peut réussir, peu importe le nombre d'éléments que vous modifiez, vous ne modifierez que la même liste à la fin !Donc, si vous voulez essayer l'effet que vous souhaitez, vous ne pouvez pas utiliser cette méthode pour générer rapidement une liste, vous ne pouvez utiliser que la méthode suivante :🎜
Parce que vous devez utiliser la variable i pour itérer, si vous changez toujours 0, a[0] sera bien sûr écrasé, et ce sera la dernière valeur
Dans le premier code, vous ne pouvez pas obtenir a=[3,4 ,5, 6,7], vous devez utiliser la variable i
Deuxième code :
Il semble que vous ayez mal écrit le code, je suppose que vous voulez poser cette question
Vous pouvez imprimer un
@Lin_R a raison
En fait, la deuxième méthode est partagée et non séparée. Parce qu'il s'agit d'une liste à ce moment-là et qu'elle est variable, alors que la première méthode est un nombre et est immuable.