- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte person00:00:00 :Quand on commence à programmer avec Python, il y a un concept qui est assez confus dans la tête des débutants,c'est la différence entre le symbole d'égalité et le mot-clé is.
00:00:10 :Le symbole d'égalité permet de vérifier l'égalité entre les valeurs de deux variables.Si je fais a égale 5000, b égale 5000, si je veux vérifier que ces deux valeurs, a et b, contiennent le même nombre,donc 5000 dans ce cas-ci, je peux faire a égale égale b.
00:00:27 :Dans ce cas-ci, ça me retourne true puisque ces deux variables, a et b, contiennent bien la même valeur.Si par contre, cette fois-ci, je fais a is b, là, cela va me retourner false.
00:00:37 :Pourquoi ? Eh bien parce que is va vérifier si les deux objets sont identiques.Donc ce que je veux dire par là, c'est si les deux objets ont le même identifiant en mémoire.
00:00:46 :Pour vérifier la place en mémoire d'un objet avec Python, on peut utiliser la fonction id.Donc si j'utilise id sur a et id sur b, on voit bien ici que le nombre est différent.
00:00:56 :Donc id de a est différent de id de b.Donc quand on fait a is b, en fait, ce qu'on vérifie, c'est si ces deux nombres sont égaux.
00:01:04 :Donc c'est un peu comme si on faisait id de a égale égale id de b.Donc dans ce cas-ci, on utilise le symbole d'égalité pour vérifier si les valeurs, donc ces valeurs ici, sont les mêmes.
00:01:15 :Dans ce cas-ci, ce n'est pas le cas. L'id de a est différent de l'id de b et donc on va avoir false.Donc c'est la même chose que ce qu'on avait ici.
00:01:22 :Donc quand on fait a is b, c'est exactement la même chose que si on faisait id de a égale égale a id de b.Donc c'est vraiment là que se situe la différence entre le symbole d'égalité et le mot is.
00:01:33 :Le symbole d'égalité vérifie les valeurs, alors que is vérifie si les objets sont les mêmes en mémoire.Alors si on refait la même expérience avec cette fois des nombres un peu plus petits,donc des nombres qui sont situés entre moins 5 et 256,là vous allez voir qu'on a quelque chose d'un peu surprenant à cause de ce qu'on appelle le small integral caching.
00:01:52 :Donc c'est en fait un mécanisme de Python qui va associer déjà des places en mémoire pour les nombres de moins 5 à 256afin d'optimiser les scripts Python que l'on va créer.
00:02:02 :Donc si je refais l'exemple avec a qui est égal à 5 et b qui est égal à 5,là si je fais a is b, on voit que ça ne retourne true.
00:02:10 :Pourtant je viens de vous dire dans l'exemple précédent ici,quand on a fait a is b, que ça retournait false puisqu'on avait deux objets qui n'avaient pas la même place en mémoire.
00:02:17 :Donc on va pouvoir revérifier avec l'idée de a et l'idée de b quelle est la place en mémoire de ces deux variableset là on voit qu'on a le même nombre qui est retourné.
00:02:25 :Donc l'idée de a est bien égale à l'idée de b.Donc ça c'est vraiment le concept de small integral cachingqui fait que les nombres entre moins 5 et 256 vont avoir une place prédéfinie en mémoireet dès qu'on va créer une variable, on va pointer vers le même nombre.
00:02:41 :Donc dans ce cas-ci on a un seul nombre 5 en mémoireet la variable a comme la variable b pointent vers le même nombre en mémoire.
00:02:48 :Donc c'est pour ça que l'objet a est égal à l'objet b avec le mot clé is ici.Maintenant je vais vous montrer quelque chose d'encore un peu plus perturbant,c'est en fait si je fais le même exemple mais à l'intérieur par exemple ici de Visual Studio Code.
00:03:02 :Donc j'ai a qui est égal à 5000, b qui est égal à 5000et je refais le même exercice d'afficher a is b.Je lance le script et là on voit que ça me retourne true.
00:03:11 :Donc pourquoi ça me retourne true ?Alors qu'on vient de voir dans IPython ici que si je fais a égal 5000, b égal 5000et que je fais a is b, cette fois-ci on a false.
00:03:22 :Donc là c'est logique puisqu'on a des nombres qui sont au-delà de moins 5 et 256donc on devrait avoir ici deux objets différents en mémoireet c'est bien le cas ici donc on fait a is b, ça nous retourne falsece qui indique que l'objet a est différent de l'objet b.
00:03:35 :Pourtant dans Visual Studio Code quand je fais a is b avec deux nombres qui sont égales à 5000là j'ai a is b qui me retourne true.
00:03:43 :Donc ça en fait c'est tout simplement encore une optimisation de Pythonpuisque quand je fais ceci dans un interpréteur Python interactifet bien je vais exécuter du code ligne par ligne.
00:03:53 :Je vais dire que a est égal à 5000 et au moment où je fais çaPython ne peut pas savoir que je vais créer un autre objet b qui va aussi être égal à 5000.
00:04:01 :Donc quand je vais créer cet objet b, il va créer un nouvel objet en mémoiresauf là encore si on est entre moins 5 et 256 pour les raisons que je viens d'expliquer.
00:04:10 :Si par contre je retourne dans mon script iciet bien Python va avoir une vue d'ensemble du script.Il va pouvoir analyser le script et se rendre compte que je vais avoir deux objetsdonc l'objet a et l'objet b qui vont avoir la même valeur.
00:04:23 :Donc là encore pour des raisons d'optimisationil ne va créer qu'un seul nombre 5000 en mémoireauquel il va faire pointer les deux noms a et b.
00:04:31 :Donc ça c'est vraiment parce que ces deux variables ici sont définies dans le même espaceet qu'on lance le script en un seul bloc.Donc on lance le script d'un coup et Python va pouvoir faire cette analyse.
00:04:40 :Quand je fais ça ligne par ligne dans un interpréteur Pythonet bien Python ne peut pas prévoir ce que je vais écrireet donc il va créer des objets à chaque fois.
00:04:48 :On peut avoir exactement le même comportement que dans Visual Studio Codeà l'intérieur d'un interpréteur Python interactif.Par exemple si je fais une fonction.Je vais faire une fonction fooet dans cette fonction je vais créer une variable a qui va être égale à 5000une variable b qui va être égale à 5000
00:05:04 :et je vais printer tout simplement a is b à la fin de cette fonction.Donc là on pourrait se dire avec tout ce que je viens de vous direque dans un interpréteur Python interactifon aurait a is b qui va être égale à false.
00:05:16 :Pourtant si je lance l'exécution de cette fonction j'ai bien true.Donc là c'est exactement la même chose que ce que je viens de vous expliquer dans Visual Studio Code.
00:05:23 :Quand on déclare une fonction ici on déclare les quatre lignes d'un coup.Vous avez vu ici que j'ai tapé les quatre lignes de codeet une fois que j'ai appuyé sur entrée tout ce bloc a été mis en mémoire.
00:05:32 :Donc en fait là de la même façon Python voit que dans cette fonctiondans ce bloc de code j'ai deux variablesdonc a et b qui ont la même valeuret donc il ne va créer qu'un seul objet 5000 en mémoireet il va faire pointer ces deux noms de variables a et b vers ce même objet.
00:05:48 :Donc là encore c'est vraiment uniquement parce que Python peut analyser mon codeet pour des raisons d'optimisation éviter de créer plusieurs objets là où il ne peut en créer qu'un.
00:05:56 :Donc voilà pour la différence entre le symbole d'égalité et le mot iset toutes les petites subtilités qu'on peut avoir que ce soit dans Visual Studio Codeou dans un interprète Python interactifet pourquoi des fois on peut avoir des comportements un peu bizarrescomme ce que je viens de vous montrer avec parfois a et b qui va nous retourner true
00:06:14 :parfois a et b qui va nous retourner false alors qu'on a les mêmes valeurs.Donc il faut bien comprendre tous ces mécanismes qui entrent en jeu à chaque fois.
00:06:20 :Donc comme je vous expliquais avec la vision globale qu'a Python de votre scriptou alors quand on fait des choses ligne par ligne dans un interprète Python interactifet aussi ce concept de small integral caching avec les nombres de moins 5 à 256.
00:06:33 :On a également ce même concept qui va être appliqué sur par exemple des chaînes de caractèresqui ont généralement une longueur inférieure à 20 caractères.
00:06:41 :Par exemple si je fais a égale a bonjour et b est égal a bonjour aussiet bien là si je fais a is b on va avoir true qui nous est retourné.
00:06:49 :Donc là ça nous indique également que a et b pointent vers le même objet bonjour en mémoire.Si par contre je fais une chaîne de caractères un peu plus longuedonc par exemple bonjour comment allez-vous et bien si je fais la même chose avec une variable bdonc bonjour comment allez-vous là si je fais a is b on a bien false qui nous est retourné.
00:07:06 :Donc là encore c'est ce concept qui en fait va nous permettre d'économiser de la mémoire.Quand on a des chaînes de caractères assez courtes Python ne va pas recréer un nouvel objet en mémoireil va tout simplement faire pointer la variable a et la variable b vers le même objet
00:07:18 :mais dès qu'on commence à avoir des chaînes de caractères un peu plus longueset bien là il va créer deux objets en mémoire.On a aussi le concept de singleton qui est en fait un objet uniquedonc on a ça pour par exemple le booléen true ou le booléen false et également pour l'objet none.
00:07:32 :Donc en fait ces objets c'est ce qu'on appelle des singletondonc ils existent de façon unique dans la mémoire de notre scriptet Python ne va pas en recréer un à chaque fois.
00:07:40 :Donc si je fais a égale true et b égale true et que je fais a is b on va avoir truepuisque donc comme je vous dis il n'y a qu'un seul objet true qui existeet à chaque fois qu'on fait une variable ici a ou b et bien en fait on va pointer vers le même objet
00:07:53 :puisqu'on a ici ce qu'on appelle un singleton.Donc ça peut paraître un peu complexe, il y a beaucoup de cas de figure vous voyezqui fait qu'on peut avoir true ou false qui nous est retourné quand on utilise is.
00:08:03 :L'important ici c'est bien de comprendre dans quel cas de figure il faut utiliser isou le symbole égal égal.Égal égal c'est vraiment pour vérifier l'égalité des valeurs entre deux variablesdonc par exemple si les deux variables contiennent le même nombreou la même chaîne de caractère ou les mêmes valeurs dans une liste
00:08:20 :et is c'est vraiment pour vérifier si deux objets sont les mêmes en mémoire.Donc généralement on utilise plutôt le symbole d'égalitéc'est quand même assez rare qu'on ait besoin d'utiliser is à part dans quelques cas précismais gardez bien ça en tête quand vous voulez vérifier l'égalité des valeurs
00:08:34 :il faut utiliser le symbole égal égal.Depuis les dernières versions de Python on a même une erreur qui a été ajoutéequi n'est en fait pas exactement une erreur mais un avertissement.
00:08:42 :Vous voyez ici que dans ce script si je vérifie donc que a is 18et bien j'ai en fait ici un syntax warning qui est un avertissementqui me dit que j'utilise le mot is avec un littéralet il me demande si je ne voulais pas au contraire utiliser le symbole égal égal.
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.