Session du 25 février 2025 à 21h00
TOSA & Certifications
Deviens membre Premium magic_button
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- check +100h de formations
- check +180 exercices de code
- check +100h de mentorats en rediffusion
- check 20 projets
- check Mentorats groupés hebdomadaires
- check Support individuel avec nos mentors
Session de mentorat TOSA
Les objets immuables
00:00:00 :Voilà, c'est parti. Bon, alors déjà, rebonsoir à tous, je pense que j'ai sauvé tout le monde.Donc comme je disais tout à l'heure, ce soir on va s'intéresser au cas des objets immuables et forcément un peu les objets immuables, pour bien comprendre.
00:00:19 :Déjà, est-ce que vous faites la différence entre les deux ?A peu près, oui.Ouais, en immuables, il y a les entiers, les tuples, exactement. En immuables, il y a les listes, les dictionnaires, voilà.
00:00:43 :Alors quelle est la différence principale que vous observez entre ces deux types ?Alors, c'est vrai qu'on dit toujours, dans Python, tout est objet. D'accord ?
00:00:58 :Que ce soit une variable, une classe, une fonction. Ouais, c'est à peu près ça la liste.Une fonction, ou autre, tout est objet. D'accord ?
00:01:17 :En fait, pour les, comment...Ceux qui sont immuables, là, c'est un nouvel objet qui est créé à chaque fois, en fait.Si on dit A égale 0 et que la ligne d'après, on dit A égale 2, c'est un autre objet, en fait.
00:01:36 :Si j'ai bonne mémoire. Alors qu'un immuable, c'est le même objet qui, entre guillemets, a grandi, quoi.Si c'est une liste qu'on append.On va voir justement que c'est un petit poil plus fin.
00:01:51 :En fait, les objets qui sont considérés comme immuables, donc les dictionnaires, les listes,c'est en fait des ensembles d'objets.Si on reprend bien les choses dans leur définition, un dictionnaire, c'est une clé et les valeurs.
00:02:16 :Donc, si on veut réduire ça au plus minimum, la clé, c'est le nom de la variable, la valeur, c'est la valeur de la variable.Jusque là, on est d'accord. Dans une liste, il y a des index, et chaque élément de la liste correspond à un index.
00:02:36 :L'index, c'est le nom de la variable, et l'élément dans la liste, c'est la valeur de la variable.Jusque là, la schématisation vous semble claire.Donc, en fait, la liste et les dictionnaires, principalement, il y en a d'autres,on va dire que c'est les plus simples à expliquer, sont des objets immuables.
00:02:57 :Pourquoi ? Parce qu'on peut, à tout instant, rajouter de nouveaux objets dedans.Mais la variable principale qui gère tout ça, ça reste toujours la même, finalement.
00:03:11 :Et comme c'est une variable qui pointe vers plein d'autres objets, celle-là, elle est immuable.Tandis que les objets immuables, ce sont des objets qui vont avoir une référence,donc le nom de la variable en question, qui pointe vers une valeur.
00:03:29 :Sauf que cette valeur, si elle est modifiée, forcément, la variable va être changée.Ce n'est pas super clair comme je l'explique là, clairement,mais vous allez voir qu'avec ce qu'on va faire, un petit peu, ça va être un peu plus clair.
00:03:48 :Le premier point, je vais vous basculer sur un petit Visual Studio Code,histoire de vous montrer ça en live.Je vais chercher un message sur le Discord.
00:03:59 :Je vais partager ça.Ok.Je crois que Google Bit a décidé qu'il m'embêterait tout le temps.Il y a encore un petit bug, ce n'est pas là, je vais le gérer autrement.
00:04:40 :Pour nous, pour rejoindre, parfois, c'est chaud.Non, mais je sais, mais là, j'ai essayé une nouvelle technique, je pense que ça va être un petit peu plus simple.
00:04:53 :D'accord.Donc, on disait, par exemple, je vais prendre une variable A,qui affiche, lui, la signe d'une valeur, mettons 5.D'accord.Et je vais afficher, c'est surtout parce que vous allez pouvoir la détecter, l'idée de A.
00:05:14 :D'accord.Ensuite, je vais prendre B.Je vais lui afficher 5 aussi, tiens.Et j'affiche l'idée de B.Déjà, là, vous allez avoir un petit comportement bizarre.
00:05:30 :Qu'est-ce qui se passe ?Vous voyez assez bien sur l'écran ou pas ?Oui, c'est le même ID.Alors, est-ce que vous savez pourquoi, déjà ?
00:05:43 :Est-ce que c'est des entiers qui ne sont pas très grands et inférieurs ?Entre 255 et 256 de mémoire, il y a des valeurs qui sont fixées.
00:05:58 :C'est pareil pour trous, ainsi de suite.Oui.Donc, maintenant, on a fait ça, on va prendre autre chose.Je vais prendre ma variable A.Et si je dis que A, tiens, par exemple, est égale à 10.
00:06:10 :Très bien.Et que j'affiche mes IDs.Donc là, j'ai bien deux IDs différents.D'accord ?Puisqu'en fait, j'ai juste changé la valeur.D'accord ?Et maintenant, si je fais un incrément de A.
00:06:32 :Donc, techniquement, on est bien d'accord.Je prends la valeur de A telle qu'elle est.Je lui ajoute 1.Logiquement, c'est juste une opération mathématique.On change juste la valeur.
00:06:46 :Je ne devrais pas avoir de problématique en termes d'ID.Normalement, là, je devrais...Alors, on va supprimer les premières lignes.Logiquement, on devrait retrouver la même idée ici et ici.
00:06:59 :Voyons voir ce que ça donne.Là, ça a changé.Alors, ce n'est pas uniquement du fait qu'on est sur des petites valeurs.Si je pourrais mettre, par exemple...
00:07:10 :On va mettre un grand chiffre histoire de sortir des singleton.Là, j'ai toujours bien la chose différente.Or, j'ai juste ajouté 1 à ma valeur.
00:07:24 :Donc, en termes de logique informatique,ça ne devrait pas poser de difficulté.Donc, est-ce que vous savez ce qui fait, justement,que cette valeur change,enfin, l'idée change,c'est-à-dire que l'ordinateur crée une nouvelle variable.
00:07:41 :Parce qu'en Python, on pourrait dire,voilà, on a une variable qui s'appelle A.On lui ajoute 1.A, c'est toujours A.Qu'est-ce qui marque en Python,s'il doit vous attirer lorsque vous lisez un script Python ?
00:07:53 :Il faut savoir que vous allez avoir affaire à une variable immuableet qui va changer de valeur par la suite.Regardez bien, c'est inscrit à l'écran.
00:08:04 :Je vous laisse réfléchir un petit peu.Personne n'a une idée ?C'est tout simplement le string égal.Parce que égal, en langage Python,ce n'est pas le égal comme nous,on le fait en mathématiques classiques.
00:08:34 :Ce n'est pas j'affiche le résultat 2.Je ne dis pas que les deux valeurs sont équivalentes.Égal, en Python, c'est une affectation de valeur.Ah, de mémoire, oui.
00:08:47 :Voilà.Donc là, pour lui, quand je remets mon égal ici,il considère que c'est la création d'une nouvelle variable.Donc il crée une nouvelle valeur pour cette variableet un nouvel emplacement de mémoire.
00:09:01 :Donc là, dans tous vos scripts,quand vous verrez une manipulation de variableet que vous verrez qu'elle s'affecte par le biais d'un égal,vous aurez quasiment tout le temps affaireà un objet immuable.
00:09:17 :D'accord ?D'accord.Seuls qui font exception,les dictionnaires et les listes,dans mon dictionnaire, on va faire mon dic égal.On va tenter une première valeur.
00:09:38 :Je ne sais pas.Voilà, c'est comme ça.Mais là, quand je vais vouloir ajouter un élémentdans mon dictionnaire,je vais faire mon dic.Hop.
00:09:51 :C.Égal.Allez, 3 par exemple, ça me va très bien.Et là, on voit bien que, ici,je crée une nouvelle variable,je fais une affectation de la valeur 3à la clé C du dictionnaire,mais le dictionnaire en soi,pour les deux là,on n'a pas de signe égal,
00:10:18 :on n'a pas de signe d'affectation.Donc, il s'agit bien d'un ajout à l'objet existant.Et d'ailleurs, si je fais ça,hop là,et on va recommencer.
00:10:30 :Je vais supprimer ce que j'avais marqué avantpour ne pas qu'on se retrouve avec 15 lignes affichées pour rien.Vous voyez qu'on a bien exactement le même ID.
00:10:40 :Donc là, c'est la petite astuce pour vraiment vous retrouver,pour savoir si l'objet que vous avez,alors après, avec le temps,vous allez manipuler vos fichiers et ainsi de suite,vous allez avec le temps très vite savoir,tiens, tel type de variable, ok, c'est nuable, tel type de variable, c'est nuable.
00:10:55 :Mais, surtout au début,attendez, je crois qu'il y a quelqu'un qui me rejoint.Vas-y, posez votre question au fur et à mesure.Il n'y a pas de difficulté.
00:11:11 :D'accord, merci.Je voudrais savoir maintenant quelle est vraiment la pertinenceà chercher l'ID d'une variable dans le développement.Alors, dans le développement, justement,vous pouvez avoir,alors là, on va rentrer dans une notion un petit peu particulière,le shadowing de variable, d'accord.
00:11:35 :C'est-à-dire,j'ai un exemple en tête,je vais vous l'écrire.Je termine ce dictionnaire, je te montre l'exemple en tête,que j'ai en tête, ok, d'accord ?
00:11:45 :D'accord, d'accord, ça va.Donc, je disais, le dictionnaire, si on n'a pas d'affectation,donc, on ajoute bien aux variables.Donc là, quand vous aurez un égaldans vos différents scripts pour créer la variable,c'est que vous créez la variable à chaque fois.
00:12:00 :Donc, vous faites une création.C'est-à-dire que quand j'écrisa égale 5et ensuite a égale,hop là, voilà, égale 6,je crée d'abord une première variablequi est a et qui a une valeur 5et là, je crée une deuxième variablequi est a et qui aura la valeur 6.
00:12:22 :C'est-à-dire que j'ai détruit la première variable.Je n'ai pas juste modifié la valeur,j'ai carrément détruit la variable précédente.D'accord ?Ok.Alors, l'ID des variables,pourquoi c'est intéressant ?
00:12:34 :Tout simplement parce que ça va vous permettre des fois,pour débuguer votre code,de comprendre certaines choses.Donc là, je vais vous écrire un petit codeassez court, maisqui va vous permettre de montrer l'exemple.
00:12:48 :Hop.On va faire comme ça.Ok.Hop.Emailégale, hop,sujetemail,voilà, email, hop, point,c'est bon, voilà.C'est une petite fonction vite fait qu'on retrouveen Django, par exemple,pour envoyer un mail.
00:13:25 :Là,techniquement,vous lancez ça,vous faites, vous utilisez, vous exécutezvotre programme en Django, ça marchera.D'accord ?Vous n'aurez pas d'erreur.Sauf que là,je vous ai fait un cas assez typiquede shadowing de variable.
00:13:43 :C'est-à-dire qu'ici,on a la variable email,d'accord ?Et ici, cette email,c'est pas je reprends l'email qui est là,c'est que je crée une nouvelle variabledans laquelleje définisun tupleavecces trois variables,puisque c'est ce qui est nécessairepour utiliser la méthode send.
00:14:01 :Ok ?Là, on se retrouve avecplusieurs fois le même nom,mais qui ne signifie pas la même chose au final.Parce que là,on est l'email sur l'adresse email,d'accord ?
00:14:14 :Et ici, on est sur l'email, l'objet.Alors,d'un point de vueprogrammatique,piqueton,ça ne va pas forcément générer un bug.D'accord ?Mais vous,en termesderelecture ou de maintenance du code,ça va être très compliqué de savoirlequelet quoi.
00:14:38 :Et si jamaisvous avez un bug dans cette fonctionet que piqueton vous retourneque le problème est causé par la variable email,vous n'allez pas savoir laquelle et à quel moment.
00:14:52 :Donc là, si vous printez les iddans le débugagede vos emails,vous allez savoir lequelcorrespond à quoi.Donc par exemple,je pourrais mettreprintemailattributargument.
00:15:09 :Hop.Printid email.Ethop là.Voilà.Ah oui, c'est email message.J'ai oublié.Email message.Voilà.Un autre truc,mais ce sera un peu plus clair.
00:15:34 :Et par exemple,en dessous,printemailobjet.Hop.Print id email.Et là, du coup,cet idva vous permettre d'identifierquelle est l'instancequi va poser une problématique.
00:15:54 :Et voiraussi,dans le cas présent,s'il a bien fait la différenceentre l'emailqu'on a passé en argumentet l'objet emailqu'on a créé.
00:16:05 :Pour voir s'il n'y a pasune confusion des genresà ce niveau-là.Donc,pour répondre à ta question,c'est justement à çaqu'il va servird'afficher les id,parce qu'un objetaura un id unique.
00:16:17 :C'est ce qui va te permettrede déterminerque c'est bien cet objet-làet pas un autre.Ok ?Est-ce que ça te semble plus clair ?
00:16:25 :Allô ?Vous m'entendez ?Oui, oui,mais je pense qu'il a déco-reco.Je pense qu'il a eu un problèmede connexion, ouais.Ce qui viendrait apparaître,là, du coup...
00:16:42 :Est-ce que tu as entendul'explication à ta question ?Tim ?Oui, non ?Ah, il a redéco, là.Peut-être un problèmede connexion, là.
00:17:00 :Espérons que la réponse,s'il peut l'avoirdans la rediff,lui conviendra,sinon je m'inviteà me contacter en privépour qu'on en parle.On va continuer.
00:17:10 :Je vais vous prendreun autre type de caractère,l'échelle de caractère.D'accord ?Vous êtes d'accordque je peux faire ceci.Ok.On l'a vu avec les prénoms.
00:17:32 :On peut utiliser ceci.Je vais faire une fauted'orthographe au vol,mais j'espèreque vous me pardonnerez.Je vais faire une fauted'orthographe au vol,mais j'espèreque vous me pardonnerez.
00:17:50 :Ok.Qu'est-ce que j'ai fait ?J'ai fait une bêtise.Il ne faut pas fairepoint, point, moins un,double point ?Il n'y a pas un double pointentre les crochets, là ?
00:18:11 :Ok.Voilà.Merci.Là, tu voulais changerle dernier ?Tu voulais changer la scène ?Ouais.Qu'est-ce que j'ai fait ?Ah oui.Voilà.Prénom.
00:18:37 :Hop.Quelqu'un qui est arrivé.Celui-ci, là.Hop.Je suis en train de faireune bêtise, en fait.Voilà.Sinon, tu mets...Ce n'est pas le pianiste.
00:19:00 :Je me suis fait aller trop loin.D'accord.Voilà.Là, par exemple,capitalize.Donc, on est d'accordque là...Non, je ne vais pas faire ça.
00:19:11 :Je vais faire...Il est déjà en capitalize, là.Voilà, voilà.C'est plus logique.Ouais, exactement.Voilà.Alors.Pour qu'elle n'ait pas peur,tac.Là, il ne se passe rien.
00:19:27 :J'ai utilisé la méthode de peur.Pourtant, il ne se passe rien.Pourquoi ?Parce qu'on est surune chaîne de caractères.Et comme on l'a dit,les chaînes de caractèressont immuables.
00:19:39 :Donc, en fait,ce que j'ai fait là,tout bêtement,ça ne sert à rien.C'est-à-dire que,éventuellement,en mémoire,quelque part,effectivement,il a créé une variableavec les lettres Jen plus en majuscule.
00:19:51 :Mais pour autant,ça n'apparaît nulle part.La seule solutionpour faire ça,c'est de faireprénom égale prénom au peur.D'accord.Puisqu'on est face à une méthodeet la méthoderetourne quelque chose.
00:20:07 :Là, maintenant,si je le fais,hop,on a bien notre Jen majuscule.Mais, une fois de plus,on a encore changédeux variables.Parce qu'on a faitavec un égal.
00:20:19 :Ouais.Print.ID.Je n'ai pas faitau premier étageque la parole.Hop.OK.Là, vous voyez,j'ai bien deux IDs différents.Donc là, avec ça,vous voyez quemême avecdes objetsqui ontdes méthodesqui peuventpermettrela modificationen soi.
00:20:53 :Parce que là,les chaînes de caractère,on est typiquementdans les objetsqui ontune possibilitéd'être modifiées.Donc le Upper,le Lower,le Capitalize,j'en passe les meilleurs.
00:21:08 :Malgré tout,si on ne les retourne pasdans une variable,ça ne reste paset ça ne s'affiche pas.Si j'avais faitPrint Prénom Upper,ça serait affiché,mais ça ne serait pasresté dans la variable Prénom.
00:21:21 :Je suis obligéde faire une affectation.Donc, vous voyez,une fois de plus,on retrouve ce signe égalqui nous indiquequ'on effaceun type immuable.
00:21:31 :Alors, les principesau type immuable,on l'a vu,il y a les entrées,les chaînes de caractère,les nombres décimaux.D'accord ?Les bouléens.Les bouléens sont aussides immuables.
00:21:48 :Si je fais ceci,Activeégaltout.OK ?Si je print mon IDActive,OK,et que je faisActiveégal False,et que je print mon ID,hop,j'obtiens biendeux IDs différents.
00:22:21 :D'accord ?Donc, on est bienface à un objet immuableparce queje suis obligéde changer l'affectation.Alors, c'est ce point-làqui perd souventun petit peu les débutants.
00:22:32 :Je suis étonnéde ne pas avoir reçuencore la question.Oui, mais on est faceà des objetsdont on change la valeur.Oui.Immuable ne veut pas direqu'on ne peut pasréutiliser la même variableen changeant les valeurspour différents besoins.
00:22:47 :D'accord ?Immuable signifie simplementque,comme on le voit iciavec les IDs,à chaque foisque vous modifiezla valeur de cette variable,vous créez un nouvel objet.
00:22:57 :Alors,d'un point de vue du programme,ça ne va pas poser de problèmepuisque vous allez traiterou utiliser la variableà cet instant Tavec la valeurque vous lui avez donnéeà ce moment-là.
00:23:07 :Donc, par exemple,là, avec mon Activa True,si je le passedans une condition,ma condition sera remplieet quand je changemon Activa False,quand je repasseraicet actif dans la condition,la condition ne sera pas remplieet ne s'exécutera pas.
00:23:19 :Pour vous,d'un point de vue lecture,vous avez l'impressiond'avoir à faireexactement la même variable,mais en fin de compte,vous avez bien manipulédeux variablesau bout du compte.
00:23:30 :Ok ?Et une des dernières typesdont on va parlerqui est immuable,c'est le tuple.Le tuple,je pense que le côté immuabledu tuple,tout le monde est à peu prèsau courant.
00:23:48 :D'accord ?Donc, si je fais mon tuple1,2,3,je le mets dans une variableet test.Il n'y a pas une grande agénosité.Qu'est-ce qui lui arrive ?
00:24:08 :Une bêtise ou quoi ?J'ai pu écrire un tuple, moi ?Ah oui, attendez,je sais pourquoi.Voilà.J'ai précisé la classe tuple,autant pour moi.
00:24:26 :Donc là, voilà.C'est un peu fatigué.Bon, je m'excuserai.Donc là,j'ai bien mon tuple.Si je prime mon ID,ok,voilà,c'est mon tuple.
00:24:43 :Ok, pas de souci.Maintenant,ce tuple, il est fixe,je ne peux pas le modifier.Eh bien, en fait, si.On peut modifier un tuple.
00:24:54 :On va reprendre.On le passe en listeet on le repasse en tuple après.Eh bien, non.Ah non.Sije metsune liste comme deuxième caractère de mon tuple.
00:25:11 :Normalement, on m'a bien ditqu'un tuple, on ne pouvait pas le modifier.Ou alors, il faudrait transformer en liste pour le modifier.Mais d'accord.Maintenant, si je fais ça.
00:25:20 :Ouais, là, le verre dans le fruit.ID test.Ok.Ça, vous allez pouvoir voir.Si je faistest1Append 5.Je prime mon ID de test.
00:25:37 :On est bien d'accord que j'ai modifié mon tuple.Oui.Et que donc,comme le tuple est un objet immuable,logiquement, j'ai changé mon ID.On est bien d'accord.
00:25:49 :C'est ce qu'on vient de voir avec les immuables.Sauf que là, sur l'Append 5,tu n'as pas d'égal.Voilà.Là, vous voyez que j'ai bien le même ID pour les deux.
00:26:00 :Et pourtant, j'ai modifié un objet immuable.Ouais.D'accord.Par contre, si je faishopetfaire comme ça.Ça.Qu'est-ce que je fais ?J'ai été trop vite.
00:26:32 :Là, j'ai bien conservé les mêmes ID à l'intérieur.Donc, mon tuple n'a pas été modifié.D'accord.Même si je fais un printde testici.
00:26:51 :Tac.En réalité, il a été modifié.Ouais.D'accord.Donc, vous voyez que même au travers des ID,on pourrait se faire avoir.D'accord.C'est comme si c'était un conteneur, en fait.
00:27:11 :Pardon ?C'est comme si c'était un conteneur.On modifie les objets qui sont dans le conteneur,mais le conteneur, il est toujours le même.Voilà.
00:27:19 :Alors, vous verrez,il y a pas mal de petites questions là-dessus au Tosaqui tombentsur ce sujet-là.En fait, tout bêtement,on se retrouverait presque,on se retrouverait dans un cas de shadow copy.
00:27:34 :D'accord ?C'est-à-dire qu'en fait,réellement,la liste que vous voyez là dans le tuple,elle n'est pas réellement dans le tuple.Elle n'est pas réellement dans le tuple.
00:27:47 :Le tuple pointe vers l'emplacement de la liste.Et la liste elle-mêmea des pointeurs vers chacune des valeurs qu'elle contient.D'accord.C'est une imbrication, en fait.
00:28:01 :Voilà.Pour le pointeur.Ça ne change pas.D'accord ?Vous verrez le chapitre,enfin, vous regarderez,j'essaierai de vous faire un petit truc,si ça vous intéresse,sur les deep copy et shadow copy.
00:28:17 :Ce n'est pas évident à comprendre,mais quand on a compris le truc,après, ça vabeaucoup mieux.Oui, il y a toujours un côté un peu obscur.
00:28:27 :Voilà.On reste sur des systèmes de pointeurs.Pour ceux qui ont fait du C,ça va êtresuper, c'est trop facile.Ceux qui n'ont jamais approché le Crisquent d'y avoir des prises de texte.
00:28:38 :Oui, oui.Donc, voilà ce que je voulais vous montrer ce soirsur les objets muables, immuables.Donc, en fait,ce qu'il faut bien retenir,c'est que dès qu'on a un égal,on est dans 99% des casface à un objet immuable.
00:28:55 :Mais ce n'est pas parce qu'un objetest défini comme immuable.S'il peut contenir des élémentstels que des listes ou des dictionnaires,l'objet en lui-même peut contenird'autres objetsmuables.
00:29:06 :À ce moment-là,l'objet en lui-même reste immuable,mais les objets à l'intérieurpeuventêtre muets.Parce que, par contre,normalement,je ne vais pas dire de bêtises.
00:29:17 :Ah non, oui, si j'allais dire de bêtises.Le test est zéro,je ne peux pas le modifier autrement.Donc, oui, voilà.En fait, vous voyez là,je peux modifier.
00:29:28 :À ce moment-là,vous avez mis un objet immuabledans un objet immuable.Techniquement,vous allez pouvoir modifier votre objet,maisce n'est pas pour autantqu'il devient immuable.
00:29:38 :C'est simplement parce quel'objet qu'il contient est muable,mais l'objet du reste est immuable.Est-ce que c'est bon pour tout le monde ?Allô ?
00:29:49 :Bonsoir, c'est François.Bonsoir, Sylvain.Ouais.Bon,je vais juste revenir sur l'exemple là.Sur le tube,là,tu as rajouté« sync »sur « test »sur le tube.
00:30:06 :Oui.Et on dit que les tubes sont immuables,par définition.Oui.C'est ça, en fait,je ne comprends pas, en fait.Alors, en fait,le tube en lui-même,c'est un objet.
00:30:20 :D'accord ?Oui.Cet objetne peut être modifié.Pour le modifier,il faut recréer un nouveauavec les mêmes valeurs « plus »ou les valeurs qu'on veut changerou plus les valeurs qu'on veut changer.
00:30:32 :Donc,ou les valeurs qu'on veut changerou plus les valeurs qu'on veut y ajouterpour qu'on puisserecréer cet objet.Alors, je vais te faire ça,comme ça,pour que tu prennes,que tu voyais bien l'idée.
00:30:44 :Hop,je vais supprimer ça.Tac.Si je fais ça,voilà.Hop.Voilà.Alors,si j'ai mon tuplequi est comme ça,je vais enlever ma liste,là,pour éviter de...
00:31:08 :Hop.Je fais « test »,hop,égal, hop,1,3.Tu es d'accord que j'ai changétechniquement les valeurs de mon tuple ?Oui.Mais,tu vas voir que quand je vaisimprimer mes IDs,je n'ai pas les mêmes IDs.
00:31:27 :Je n'ai pas les mêmes IDs.Il a arrêté le test.Voilà.Je suis face à un objet immuableet la seule solution que Python apour régler ce que je lui demande,c'est de créer un nouvel objet testqui aura toujours un type tuple,mais qui aura les valeurs
00:31:44 :que j'aurais données dans mon tuple.Ok ?Déclare l'ancien, alors.Voilà.Ça fait une déclaration.Là,si je reprends l'exempleque je vous avais mis,hop,je ne prends pas le...
00:31:56 :Voilà.On va reprendre avec 1, 2, 3.Que je fais un appendde 4.Là,tu remarqueras que j'ai bienles mêmes IDs.Mais qu'est-ce qui s'est passé ?
00:32:09 :C'est que je n'ai pas modifiéle tuple en lui-même.Ah, c'est la listequ'on a modifiée.D'accord.J'ai modifié la liste.Et comme à l'intérieur du tuple,c'est des pointeursvers des valeurs,test pointe vers une listequi contient 2, 3.
00:32:24 :Donc si je lui demandede modifier cette liste,d'ajouter quelque chose,lui, ça ne lui pose pas de problèmeparce que lui,dans son tuple,dans sa définition,à l'indice 1,il a un pointeurvers une liste.
00:32:37 :Il sait où est la liste.C'est-à-dire qu'à l'instant T,même si on veut êtreextrêmement précis,l'objet testn'a pas connaissancedes valeurs que contiennentla listejusqu'à ce qu'on lui demande.
00:32:49 :Parce que c'est à ce moment-làqu'il va aller voir la liste,il va regarder les valeursqui sont dedanset il va nous les renvoyer.
00:32:55 :D'accord.Donc,si tu peux fairetoutes les modificationsque tu veux dans la liste,le tuple, lui,ça ne va pas le dérangerparce que lui,la seule chose qu'il a,en fait,c'est un pointeur vers la liste.
00:33:09 :Ça va, c'est bon.La seule chosequi pourrait le déranger,c'est qu'au lieu de faireun pointeur vers une liste,tu voulais transformer, par exemple,ta liste en 7.
00:33:20 :Oui.Et là, ça l'embêterait.Ok ?Ok, je vois, je vois.Donc, je ne sais pas,par définition,je ne sais pas,qu'est-ce que...Parce qu'il y a beaucoupde définitions des objetsmuables et immuables.
00:33:38 :Je ne sais pasquelle définition tu...Oui ?Comme je vous ai dit,le plus simple à retenir,si au moment de le définirou de le modifier,enfin au momentde modifier un objet,vous êtes obligéd'utiliser le signe égal,c'est que vous êtes faceà un objet immuable.
00:33:57 :D'accord.Si vous pouvez modifierl'objet sans utiliserun signe égal,vous êtes faceà un objet immuable.Je reprends mes exemples,alors que ce n'était peut-êtrepas encore arrivé tout à l'heure.
00:34:12 :Je vais reprendrel'exemple du dictionnaire.Hop.Bon.Dic.Égal.Hop.Tac.Voilà.Dic.En partie.Tac.D.Voilà.Égal.Voilà.Je vais t'imprimer les IDcomme ça,ça va te fairefaire complètement clairdans ton esprit.
00:34:57 :Voilà.J'ai bien les deux mêmes IDpour mon dictionnaire,d'accord ?Oui.Là, tu remarquerasque j'utilise mon signe égalpour l'affecter à mon objet.
00:35:12 :Modifier, oui.D'accord ?D est une variablequi a pour valeur 4.Alors, c'est une variable spécialeque dans le langage français,que dans le langage pluton,on appelle clé.
00:35:23 :D'accord ?Mais c'est une cléqui a une valeur de 4.Mais pour ajouter cette clé à mon dic,sur un cracentre mon dic et la clé,j'ai pas de signe égal.
00:35:32 :Donc, le dictionnaireest un objet muable.Puisqu'il m'offre des possibilitéssans utiliser le signe égalde modifier les valeursqu'il contient.Ok.Par contre, à partir du momentoù je vais reprendre mon exempleavec les entiers,je fais Aégal 5.
00:36:04 :J'incrémente de 1.D'accord ?Donc, j'ai juste ajouté 1.Là, j'ai utilisé le print idqu'il me propose.Je vais le remettre au-dessus.Hop.On va supprimer tout le reste.
00:36:24 :Là,j'ai bien deux id différentsparce que j'ai bien recréé un objet.Mais même avec un incrément,tu vois,j'ai utilisé un signe égalpour modifier la valeurde ma variable.
00:36:35 :A partir du momentoù tu dois utiliserun signe égalpour modifier une variable,c'est que tu es faceà une variable de type immuable.
00:36:44 :D'accord.Donc,d'accord.Si tu peux le faire sans,c'est que tu es faceà une variable immuable.Immuable, ok.C'est assez simpleà retenir finalement.
00:36:58 :Au début,tu vas te poser un peu des questionspuis après, très vite,quand tu vas manipuler,ça va devenir évident.Oui, c'est ça.Parce qu'il y a tellementde définitions,des fois, tu te perds.
00:37:08 :Comment, toi,tu peuxsouliger ça, en fait ?Voilà.Sur cette notion de Python,la clé, c'est le signe égal.D'accord.Alors, c'est vraique ça peut être confusparce que dans nous,dans notre langage mathématique,le signe égalreprésente une égalité.
00:37:29 :C'est-à-dire qu'en fait,on dit que les deux variables,les deux élémentsde chaque côté du signesont équivalents.Mais il ne faut jamais oublierau Python que si tu veuxsavoir si...
00:37:40 :Hop, voilà.Je vais faire que ça s'imprime,sinon il va m'embêter.Les deux signes égales, en fait.Voilà.L'égalité,savoir si c'est bien la valeur,c'est le double signe égal.
00:37:56 :Là, je vais avoirun petit trou qui va apparaîtreparce qu'effectivement, c'est vrai.Le simple signe égal en Python,c'est une affectation.À partir du momentoù on a une affectation,c'est qu'on est obligéde faire de l'affectationpour changer les valeurssi on est passéà une variable immuable.
00:38:15 :Un type de variable immuable, pardon.D'accord.Est-ce que c'est plus clairpour toi, Sylvain ?Oui, c'est clair, c'est clair.Merci.Est-ce qu'il y a d'autres questions ?
00:38:31 :N'hésitez pas.C'est clair pour tout le monde ?Déjà, merci pour l'astuce du égalpuisque vous ne l'avez pas remarqué.Oui, vraiment,c'est plus pratique.
00:38:47 :Oui, carrément.Égal immuable.Ça égale immuable.Voilà.Après,c'est plus simple,c'est plus simple,c'est plus simple,c'est plus simple.Voilà.Des conditionnaires,listes,c'est des objets immuables.
00:39:09 :Voilà.Si ça peut être modifié sans égal,c'est que c'est immuable.S'il faut un égal pour modifier,c'est immuable.C'est pas simple.Il est vraiment conçu.
00:39:23 :Voilà.Il faut toujours essayerde résoudre ça au plus clair.Des listes de définitionde trois lignes,vous ne les retiendrez jamaiset dans la pratique,vous ne les retiendrez pas.
00:39:34 :Voilà.Dans un de tes exemples,tout à l'heure,tu avais un prénom.hopper.Au départ,tu ne l'avais pas fixéà la variable prénom.Et donc,quand on crée justeprénom.hopper,
00:39:50 :ça veut dire que c'est écriten mémoireet effacé aussitôt,après ?C'est ça ?En fait,avec le .hopper,le hopper,c'est ce qu'on appelleune méthode.
00:40:01 :Alors,on parle de toutesnatifs pythons,les chaînes de caractère,les entiers,les flottes,et ainsi de suite.Mais,c'est d'une certaine manière,certains vont pouvoirme brûler sur un bûcherpour ce que je dis,c'est un abus de langage.
00:40:22 :Parce qu'en fait,par exemple,les chaînes de caractère,STR,c'est une classe,en fait.D'accord ?Je vais essayerde vous le montrer en live.
00:40:39 :Un petit instant,je vais faire ça,clac.Hop,on va retourner surle code.Voilà.Si je faisprénomégalPatrick.On va prendrele prénom préféré de Thibault.
00:41:02 :Printtypeprénom.OK ?Regardonsce qu'il m'affiche.Il m'affiche bien STR,mais qu'est-ce qu'il m'afficheavant surtout ?Classe.Voilà.Les chaînes de caractèrecomme les entiers,ainsi de suite,ce sont des classes.
00:41:22 :Et donc,quand on prendHopper,voilà.Ouais,je vais essayer de faire ça.Ça va êtrebeaucoup plusparlant pour vous.Ouais,c'est comme si c'étaitune méthode de classe,quoi.
00:41:39 :Newfile.Hop.OK.Hop là.Donc,on va reprendrenotre exemple.PrénomégalePatrick.Voilà.OK ?Et maintenant,je vais faireprénompoint Hopper.
00:42:10 :Ce qu'on montrait tout à l'heurequi ne renvoie rien.OK ?Maintenant,je vais sur Hopperet je vais à la définition.Là,on est sur la classeSTRqui est définie dans Python.
00:42:21 :D'accord ?Et comme vous pouvez le voir,Hopper,c'est une méthode.D'accord ?Quiqui renvoieune copiede la chaîne de caractèreconvertieen majuscule.
00:42:38 :Donc,elle,ça renvoie unevaleur.Ça renvoie pasle prénomen soi.Ça renvoieune valeur.Et lorsque vous avez un return,si vous ne l'affectez pasà une variable,c'est comme sivous avez décidéde jouer au frisbeemais qu'il n'y a personne en face.
00:43:03 :Vous lancez le frisbeemais le frisbee est perduparce qu'il n'y a personnepour vous le renvoyer.D'accord ?Là, c'est pareil.Si le prénom Hopper,je ne le mets pas dans une variable,c'est comme si j'envoyaismon frisbeemais je ne vais pas pouvoirle récupérerparce qu'il n'y a personne
00:43:18 :pour me renvoyer le frisbee.OK ?Tandis que si je l'affecteà une variable,peu importe,ce n'est pas le but,c'est le problème.Et que je faisprint prénom,là, je vais mon frisbeequi revient.
00:43:34 :Ah oui, mince,oula, stop.Qu'est-ce qu'il fait ?Je vais lancer mon projetDjango sur lequelje suis en train de bosseret ça va poser problème.
00:43:45 :Il me renvoie bienle prénomavec une majuscule.Donc là,en ligne 1,je crée mon frisbee.Là, en ligne 2,j'envoie mon frisbeeà mon partenaire de jeuqui s'appelle prénomet je lui disrenvoie-moi le frisbee.
00:44:00 :Et donc,mon partenaire de jeume renvoie mon frisbeeet donc,il est en l'état actuelPatrick,avec toutes les 3 majuscules.Et donc,toutes les classesque vous avez,STR et ainsi de suite.
00:44:15 :Alors,où est-ce qu'il m'a mis ?Je vais retourner dessus.Voilà.C'est des classesqui sont définiesdans le build clean de Python.D'accord ?
00:44:28 :Ça, c'est toutes les méthodesque vous pourrez voir apparaître.Si vous faites...Alors,je vais lancer un terminal.Hop.Je vais me mettre sur un...
00:44:37 :Python.Est-ce que c'est assez grospour vous ?Oui, oui.Voilà.Si je fais help...Non,j'espère que c'est dit.STR.Il me renvoie toutes les méthodesqui sont dans STR.
00:44:52 :Et là,on va bien retrouver icinotre upper.D'accord ?Et c'est toutes les classes,toutes les méthodesqui sont définiesdans la classe upper.
00:45:02 :Ce qui permetde réaffirmerce qu'on dit toujoursen Python.Tout est objet.Puisqu'une classecrée aussi des objets.OK.Du coup,je reviens à ma question.
00:45:21 :Quand tu ne faisais pasl'affectation...Avant de faire l'affectationde prénom égaleprénom.upper,ça veut dire queprénom.upper,ça veut dire que ça,c'est...prénom.upper
00:45:34 :est créé en mémoireet aussitôt effacé ?Alors,techniquement,on peut dire ça.C'est à peu près ça,oui.Voilà.On ne pourra pas le récupérer.
00:45:45 :D'accord ?Ça passe dans la ramasse nette,c'est ça ?Voilà.OK.Ça va tomber, là.Puisqu'en fin de compte,plus rien ne va...Au premier cycle de RAM,le garbage collectorva supprimer cette valeurpuisqu'il n'y aura plusaucune variablequi pointera vers cette valeur.
00:46:04 :Ouais, ouais.OK.Ça marche.Voilà.Donc, dans un premier temps,elle existe.Mais très rapidement,elle va être effacéepuisqu'elle ne sert à rien.Aucune variablene pointe vers cette valeur.
00:46:17 :Et tout à l'heure,tu as interrogéles variablespour avoir leurs IDsavec des print IDsqui demandent la variable.Est-ce que c'est possiblede faire l'inverse ?
00:46:30 :C'est-à-dire,quand tu as un nom,un numéro d'ID,est-ce que tu peuxinterroger le numéro d'IDpour savoirce qu'il y a dedans ?J'avoueraisque tu me poses une colle.
00:46:42 :Maintenant,peut-être que c'est possible.Je ne saurais pas te répondre,clairement.Mais après,je n'en vois pas trop l'utilité.OK.Non, non, mais c'est juste…Alors, je vais m'expliquer.
00:46:58 :Voilà.Je vais lancer ça.Je le lance une première fois.Alors, non.Ah.Allez-y.Voilà.Donc,je lance une première fois.Je lance une première fois.
00:47:10 :Alors, non.Ah.Allez-y.Voilà.Je pense qu'on va pouvoirobserver le comportementcomme ça.Je vais le lancer une première fois.OK.J'ai cet ID.
00:47:20 :Hum.OK.Je le relance une deuxième fois.Ouais.Je n'ai déjà plus le même ID.Ça va changerà chaque exécutionde ton programme.Donc,alors,peut-être que dans le cadrede ton script en soiou de ton programmeplus global,il y a une possibilitéd'utiliser çaet de le…
00:47:38 :de le vérifierpour obtenir la valeuret ainsi de suite.Je n'en vois pastrop l'intérêt,mais admettons,admettons,tout peut avoir un intérêtà un moment donné.
00:47:49 :Mais,vu que ça changeà chaque…à chaque exécutiondu programme,tu vas pouvoir récupérerton IDdans le cadre du programmeet peut-être utiliser cette IDpour sortir la valeur.
00:48:01 :Mais maintenant,quelque part,c'est un mécanismequi est déjà existantet qui est tout simplementpar le nom des variableset leurs affectations.D'accord.D'accord.
00:48:10 :Là,le seul trucque tu pourrais faire,par exemple,c'est peut-être,par contre,comparer les IDs.Tu vois,alors,bon,je ne vais pas décriretout le truc là,mais on pourrait imaginerun truc comme ça.
00:48:26 :ID,nombre,par exemple,je ne sais pas,peu importe,pour voirsi tu es à faireà la même variable,qu'il n'y a pas le même nombreet qu'en fin de compte,tu as la même variable.
00:48:40 :Par exemple,je vais accepter.A égal 1,B égal 1,if ID Aégal ID B,hop,voilà,print,c'estvoilà.Par exemple,ok,mais utiliser le numérode l'ID en soi,bon,ça n'a pas un gros intérêt.
00:49:15 :Alors,je ne dis pas que c'est impossible,mais je ne vois pasl'intérêt en soiet puis vu que c'estle numéro d'ID,on change à chaque fois,ça va être très complexeà gérer.
00:49:24 :Une question,Stéphane,peut-être.Oui,c'est là.En fait,l'ID,parce que là,par exemple,A égal 1,B égal 1,et les deux IDs,apparemment,oui,parce que pour moi,l'ID,c'est la référence mémoireet non le contenu.
00:49:47 :Alors,j'ai choisi ces valeurs-làparce que c'est un cas particulier,c'est les singleton,d'accord,c'est-à-dire qu'on a les chiffresde,alors c'est de moins,je crois,de mémoire,c'est de moins 255 à 256,je crois,au moins 0 à 256,sûr,je crois qu'il y a la valeur négative
00:50:06 :jusqu'au moins 255,il y a true,false,qui, en fait,ont des IDs fixes,qui ont des IDs réservésen mémoire.D'accord,d'accord.Et donc,c'est le cas particulier,si tes variablesont une valeur,ces valeurs-là identiques,au lieu de créerune variabledans la mémoirepour affecter cette valeur,
00:50:35 :il va faire pointer ta variablevers ce singleton.C'est une astucepour économiser de la mémoire,si tu veux.D'accord.Du coup,tu auras tous les mêmes ID.
00:50:48 :Ok,là, du coup,si je mets B égal à 5,ça ne donnera pas,si je mets 5,A5, B5,ça ne peut pas donnerle même résultat.
00:50:56 :5 et 5 ?Oui.Si,puisque 5 est un singleton.Ok,ce que je voulais dire,en fait,ID,le ID,c'est la référence mémoirede A.
00:51:11 :L'emplacement mémoire,voilà.L'emplacement mémoire,voilà, de A.Voilà.Maintenant,du fait que j'ai misA égal à 5et B égal à 5,est-ce qu'ils ontle même emplacement mémoire ?
00:51:23 :Oui.Je te les ai imprimés.Tu vois,ils ont exactementle même emplacement mémoire.D'accord.Et là, par contre,contrairement à ce quej'ai montré tout à l'heure,alors ouais,ça change.
00:51:41 :Si tu relances,ça change.Mais quand tu vas lancerton script,il va prendreune série d'emplacementsmémoirespour ces valeurs-là.D'accord.Ok.Comme c'est des,on va dire,c'est des valeursqui sont très souventutiliséesautour des programmes,il cale toutes ces valeurs-là,comme ça,ça lui permet,
00:52:02 :même si on a50 variablesqui ont la valeur 5,bah lui,il n'existequ'un seul emplacementmémoire.D'accord.Parce que,pour moi,il allait créerun autre emplacementpour B.
00:52:16 :En fait,B égale à 5.Non.Alors,les variables,donc,le nom de la variable,A, B,et ainsi de suite,alors,si vous n'êtes pas fixé,c'est vrai que c'est un conceptun peu compliqué,ce sont des pointeurs.
00:52:30 :C'est juste une indicationoù aller chercher.C'est un peu gros,ce que je vais dire,mais la véritable valeurqu'il y a derrière A,dans le cas de la dernière exécution,c'est 42, 24, 0, 0, 90, 80.
Aucune occurrence trouvée pour « ».