163 votes

Python affecte plusieurs variables à la même valeur ? comportement de la liste

J'ai essayé d'utiliser l'affectation multiple comme indiqué ci-dessous pour initialiser les variables, mais je suis confus par le comportement, je m'attends à réaffecter la liste des valeurs séparément, je veux dire b[0] et c[0] égale 0 comme avant.

a=b=c=[0,3,5]
a[0]=1
print(a)
print(b)
print(c)

Le résultat est : [1, 3, 5] [1, 3, 5] [1, 3, 5]

Est-ce correct ? Que dois-je utiliser pour l'affectation multiple ? Qu'est-ce qui est différent de cela ?

d=e=f=3
e=4
print('f:',f)
print('e:',e)

résultat : ('f:', 3) ('e:', 4)

7voto

Nick Burns Points 963

Dans votre premier exemple a = b = c = [1, 2, 3] que vous dites vraiment :

 'a' is the same as 'b', is the same as 'c' and they are all [1, 2, 3]

Si vous voulez que 'a' soit égal à 1, 'b' égal à '2' et 'c' égal à 3, essayez ceci :

a, b, c = [1, 2, 3]

print(a)
--> 1
print(b)
--> 2
print(c)
--> 3

J'espère que cela vous aidera !

4voto

Vikas Points 752

En clair, dans le premier cas, vous attribuez plusieurs noms à une list . Une seule copie de la liste est créée en mémoire et tous les noms font référence à cet emplacement. Ainsi, modifier la liste en utilisant l'un des noms modifiera réellement la liste en mémoire.

Dans le second cas, de multiples copies de la même valeur sont créées en mémoire. Chaque copie est donc indépendante des autres.

3voto

pydsigner Points 1121

Ce dont vous avez besoin est ceci :

a, b, c = [0,3,5] # Unpack the list, now a, b, and c are ints
a = 1             # `a` did equal 0, not [0,3,5]
print(a)
print(b)
print(c)

3voto

Marco Points 1187

Le code qui fait ce dont j'ai besoin pourrait être le suivant :

# test

aux=[[0 for n in range(3)] for i in range(4)]
print('aux:',aux)

# initialization

a,b,c,d=[[0 for n in range(3)] for i in range(4)]

# changing values

a[0]=1
d[2]=5
print('a:',a)
print('b:',b)
print('c:',c)
print('d:',d)

Résultat :

('aux:', [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]])
('a:', [1, 0, 0])
('b:', [0, 0, 0])
('c:', [0, 0, 0])
('d:', [0, 0, 5])

0voto

EnKayJay Points 21

Le comportement est correct. Cependant, toutes les variables partageront la même référence. Veuillez noter le comportement ci-dessous :

>>> a = b = c = [0,1,2]
>>> a
[0, 1, 2]
>>> b
[0, 1, 2]
>>> c 
[0, 1, 2]
>>> a[0]=1000
>>> a
[1000, 1, 2]
>>> b
[1000, 1, 2]
>>> c
[1000, 1, 2]

Donc, oui, c'est différent dans le sens où si vous affectez a, b et c différemment sur une ligne séparée, en changer un ne changera pas les autres.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X