Bonjour je voudrais savoir s'il est possible (et si oui comment) de mettre des variables dans les listes à savoir que lorsqu'on fait appel à la liste celle-ci prend la valeur actuel de la variable dans la liste ?
merci
Version imprimable
Bonjour je voudrais savoir s'il est possible (et si oui comment) de mettre des variables dans les listes à savoir que lorsqu'on fait appel à la liste celle-ci prend la valeur actuel de la variable dans la liste ?
merci
Bonjour !
Je ne suis pas sûr de bien comprendre.
Donc non...Code:
1
2
3
4
5
6
7
8
9
10 >>> toto = '5' >>> tata = '6' >>> titi = '7' >>> tutu = '8' >>> famille = [toto, tata, titi, tutu] >>> famille[0] '5' >>> toto = '55' >>> famille[0] '5'
Mais bon c'est normal.
Sauf si les valeurs sont des refs.
Sa demande n'est pas très claire à mon goût...
En pratique on utilisera par exemple un dictionnaire :
https://frederic-lang.developpez.com...a-python#LIV-7
Je n'ai rien compris, mais je n'ai lu la question que trois fois :)
Un exemple peut-être, ou alors expliquer quel est le but de la manoeuvre.
bonjour
Question pas bien comprise, mais ton exemple est bien
Ici dans ton exemple, c'est que l'on va créer une autre variable ;) nous perdons donc la référence au précédent objet et nous modifions en réalité un nouvel objet
Si notre objet est mutable :
on change bien le contenu de la liste et dict directement via l'objet (de départ)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 class Truc: def __init__(self, v): self.val = v def __repr__(self): return str(self.val) def inc(self): self.val += 1 def set(self, v): self.val = v toto = Truc(5) tata = 6 titi = 7 tutu = 8 fam = {"toto:": toto} famille = [toto, tata, titi, tutu] print(toto, famille, fam) #toto = Truc(55) NON sinon c'est une autre variable que le précédent "toto" toto.inc() print(toto, famille, fam) toto.set("essai") print(toto, famille, fam)
Code:
1
2
3 5 [5, 6, 7, 8] {'toto:': 5} 6 [6, 6, 7, 8] {'toto:': 6} essai [essai, 6, 7, 8] {'toto:': essai}
P'tite question au passage, il n'y a que la liste, le dictionnaire et le set qui soient mutables ?
Exemple :
n=1
list = ["banane", n]
print list
ça fait : banane, 1
n=n+1
print list
banane, 2
Je demande juste si on peut mettre des variables dans les listes.
Le plus simple est de savoir ce qui est immutable : bool, int, str, bytes, tuple, frozenset. Donc cet exemple ne fonctionne pas avec un tuple. Tout le reste est mutable.
En reprenant ton nom de variable "famille", on peut ajouter des objets mutables "Personne" pour un exemple plus parlant
---------------Code:
1
2
3
4 papa = Personne("Papa", 45) maman = Personne("Maman", 42) Famille = [papa, maman] papa.age = 46
j'ai répondu :
Oui, nous avons des variables (des références sur ces variables) dans une liste et nous pouvons les modifier (si elles sont mutables)
ici, tu vas créer une nouvelle variable n et en aucun cas modifier le variable n précédente (et le contenu de "list" pointe lui vers le n précédent donc ne change pas)Code:n=n+1
Note: n est un entier et un entier est immutable...
Par contre la syntaxe n += 1 pourrait être trompeuse, on pourrait se dire qu'on ne crée pas une nouvelle variable...
Code:
1
2
3
4
5
6 >>> n = 5 >>> id(n) 2335538020720 >>> n += 1 >>> id(n) 2335538020752
Pour être complet :
Ici, même résultat. Nous avons créé une nouvelle "variable" dans notre liste et elle ne pointe plus vers nCode:
1
2
3
4 n=1 lists = ["banane", n] lists[1] = 2 print (n, lists)
-------------
Lorsque j'étais débutant, j'ai compris ces notions déroutantes grâce à https://www.youtube.com/watch?v=XkFYa8genoI
Bonjour
Oui
Code:
1
2
3
4 >>> n=1 >>> l=[n, n] >>> l [1, 1]
Ensuite, la question est de savoir ce qui se passe si on modifie la variable.Mais la réponse dépend de savoir si la variable est "simple" ou "complexe"
Tout ce qui est (int, flot, str) est "simple". Ici on a un int (n=1) donc simple. Elle a simplement été copiée dans la liste "l" donc son changement untérieur n'influe pas sur la liste...
Code:
1
2
3
4 >>> n=n+1 >>> l [1, 1] >>>
Tout ce qui est (liste, ensemble, dictionnaire, objet) est "complexe". Pour faire des économies, Python les copie alors par quelque chose qu'on peut appeler "référence" (ou "pointeur" pour ceux qui ont fait du C) car c'est plus rapide de copier la référence d'une liste que la liste complète. Mais (inconvénient) si on modifie la liste d'origine, ça impacte aussi la liste dans laquelle elle a été copiée.
Code:
1
2
3
4
5
6
7
8 >>> n=["xxx", "yyy"] >>> l=[n,n] >>> l [['xxx', 'yyy'], ['xxx', 'yyy']] >>> n[0]="toto" >>> l [['toto', 'yyy'], ['toto', 'yyy']] >>>
Tu te rends compte que c'est le cas le jour où tu définis tes propres objets lesquels devront posséder l'opérateur d'addition...
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 class myInt: def __init__(self, n): print("init", self, n) self.__value=n def __del__(self): print("del", self, self.__value) def __add__(self, n): print("add", self, n) return myInt(self.__value + n) n=myInt(5) print(hex(id(n))) n+=1 print(hex(id(n)))
Au codage tu te rends compte que l'addition est obligée de retourner un nouvel objet. Et donc au résultat...
Il y a d'abord création du 5, avant qu'il soit affiché. Puis quand l'addition est appelée, elle effectue successivement création du 6, puis suppression du 5 ; et le 6 est alors affiché. Puis enfin suppression du 6 quand le programme se termine.Code:
1
2
3
4
5
6
7 init <__main__.myInt object at 0x7f4e43db9de0> 5 0x7f4e43db9de0 add <__main__.myInt object at 0x7f4e43db9de0> 1 init <__main__.myInt object at 0x7f4e43db9690> 6 del <__main__.myInt object at 0x7f4e43db9de0> 5 0x7f4e43db9690 del <__main__.myInt object at 0x7f4e43db9690> 6
merci je comprends un peu mieux,
je continue de vous lire et chercher quand je peux
je vais essayer de vous envoyer du code
Et tous les objets qui contiennent l'un de ces éléments. Par exemple un tuple est immuable sauf si un de ses éléments est une liste.
Le test qui définit ça c'est la fonction hash(). Tu fais hash(truc), si le truc est immuable ça marche, s'il est mutable ça ne marche pas.
Ah ok merci Sve@r c'est plus clair !