CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Python] Petite question

Incognitoast
Incognitoast
Niveau 75
13 octobre 2017 à 12:11:16

Salut,

J'aurais voulu avoir confirmation d'un point qui m'étonne un peu en Python :noel:

Dans le code suivant :


i = 0
while i < 100 or (...):
        ...
        i += 1

On est bien d'accord que la 'référence' i va à chaque tour de boucle être réassigné à une nouvelle variable (et la précédente variable sera supprimée peu après j'imagine) :mort: Donc c'est un peu comme si on avait une centaine & suppression de création de variable pour un simple i itératif ...

Je me trompe ou c'est vraiment comme cela ? Car ça m'a l'air d'être inutilement lourd niveau ressource, et je vois pas trop l'intérêt de ces type immuables :(

RegleGraduee
RegleGraduee
Niveau 70
13 octobre 2017 à 12:19:17

Non Python n'et pas bête. S'il voit que le type est le même il va pas recréer une variable à chaque fois. Je connais pas le fonctionnement de la VM de Python, mais c'est typiquement le genre de chose qui sont optimisé.
Et c'est mieux de faire

for i in range(100):
    print(i)
Incognitoast
Incognitoast
Niveau 75
13 octobre 2017 à 12:21:46

Je sais pour la boucle for, mais comme il y a quand même des cas où on a besoin d'une boucle while avec une variable que l'on touche régulièrement, c'était surtout un exemple :hap:

D'ailleurs je suis bête mais j'aurais pu afficher id(i) à chaque fois... je suis sûr que je vais avoir 100 adresses différentes. Je vais essayé tient

edit: c'est bien le cas :(

Message édité le 13 octobre 2017 à 12:23:12 par Incognitoast
RegleGraduee
RegleGraduee
Niveau 70
13 octobre 2017 à 13:43:23

Le 13 octobre 2017 à 12:21:46 Incognitoast a écrit :
Je sais pour la boucle for, mais comme il y a quand même des cas où on a besoin d'une boucle while avec une variable que l'on touche régulièrement, c'était surtout un exemple :hap:

D'ailleurs je suis bête mais j'aurais pu afficher id(i) à chaque fois... je suis sûr que je vais avoir 100 adresses différentes. Je vais essayé tient

edit: c'est bien le cas :(

En effet :(
Après je pense pas que ce soit "lourd", c'est juste un changement de référence, donc une sorte de pointeur.

aAardvark
aAardvark
Niveau 75
13 octobre 2017 à 13:46:48

Le 13 octobre 2017 à 13:43:23 RegleGraduee a écrit :
En effet :(
Après je pense pas que ce soit "lourd", c'est juste un changement de référence, donc une sorte de pointeur.

Bah ça fait quand même réserver une nouvelle variable pour supprimer l'ancienne + changement de la référence :fou:

C'est peut-être pas si lourd que ça effectivement, mais j'ai du mal à comprendre l'intérêt de ces types immuables

RegleGraduee
RegleGraduee
Niveau 70
13 octobre 2017 à 14:03:26

Le 13 octobre 2017 à 13:46:48 aAardvark a écrit :

Le 13 octobre 2017 à 13:43:23 RegleGraduee a écrit :
En effet :(
Après je pense pas que ce soit "lourd", c'est juste un changement de référence, donc une sorte de pointeur.

Bah ça fait quand même réserver une nouvelle variable pour supprimer l'ancienne + changement de la référence :fou:

C'est peut-être pas si lourd que ça effectivement, mais j'ai du mal à comprendre l'intérêt de ces types immuables

La référence peut changer mais le zone mémoire pointé est surement la même après :(
Après pour les histoires de types immuables j'ai jamais fait attention à ce genre de propriété donc je sais pas :hap:

aAardvark
aAardvark
Niveau 75
13 octobre 2017 à 15:19:33

Je ne comprend pas comment on peut utiliser un langage sans faire attention à ce genre de chose... m'enfin, c'est sans doute mon passé de programmeur (amateur) en C qui parle :hap:

Les implications sont bien expliquées ici (1ère réponse) :d) https://stackoverflow.com/questions/986006/how-do-i-pass-a-variable-by-reference

RegleGraduee
RegleGraduee
Niveau 70
13 octobre 2017 à 17:16:43

Le 13 octobre 2017 à 15:19:33 aAardvark a écrit :
Je ne comprend pas comment on peut utiliser un langage sans faire attention à ce genre de chose... m'enfin, c'est sans doute mon passé de programmeur (amateur) en C qui parle :hap:

Les implications sont bien expliquées ici (1ère réponse) :d) https://stackoverflow.com/questions/986006/how-do-i-pass-a-variable-by-reference

C'est juste que ce genre de vocabulaire mutable/immuable ça m'a toujours barbé, du coup j'ai jamais cherché à les retenir, mais ça veut pas dire que j'ai pas remarqué ces comportements.

Azmurael
Azmurael
Niveau 10
13 octobre 2017 à 23:15:58

Le 13 octobre 2017 à 13:46:48 aAardvark a écrit :

Le 13 octobre 2017 à 13:43:23 RegleGraduee a écrit :
En effet :(
Après je pense pas que ce soit "lourd", c'est juste un changement de référence, donc une sorte de pointeur.

Bah ça fait quand même réserver une nouvelle variable pour supprimer l'ancienne + changement de la référence :fou:

C'est peut-être pas si lourd que ça effectivement, mais j'ai du mal à comprendre l'intérêt de ces types immuables

C'est simplement pour éviter les effets de bord.
a = 5 b = a b += 5 #a vaut 10

Message édité le 13 octobre 2017 à 23:18:16 par Azmurael
aAardvark
aAardvark
Niveau 75
14 octobre 2017 à 17:26:28

C'est simplement pour éviter les effets de bord.

a = 5
b = a
b += 5

  1. a vaut 10

Hmm ok. Pour éviter les effets de bord tout en conservant le fonctionnement par référence

Niverolle
Niverolle
Niveau 10
14 octobre 2017 à 19:36:33

C'est surtout un choix sémantique.

En C, une variable de type int désigne une case mémoire 32 bits dont on se sert pour stocker un entier compris entre -2^31 et 2^31-1. Quand tu écris i=i+1 tu es en train de changer la valeur stockée dans cette case.

En Python, une variable de type int est un entier. Ce sont les entiers des maths, ceux qu'on connait bien, qui n'ont pas de problème d'overflow. On n'a pas de raison de vouloir modifier l'entier 3, l'entier 3 vaut 3 et on aurait de sérieux soucis si on pouvait changer sa valeur : c'est pour ça que les entiers sont immutables. L'opération '+' prend en entrée deux entiers et renvoie un *nouvel* entier. Quand tu écris i=i+1 en python tu n'es pas en train de modifier l'entier i, tu es en train de calculer un nouvel entier et de l'appeler i. Le fait que tu lui donnes le même nom que ton 'i' précédent est purement accidentel, il n'y a pas de raison que ça se comporte différemment que de faire j=i+1.

Dans la machine, au final tout ça sera bien sûr représenté par des cases mémoires avec un nombre de bits fini, des problèmes d'overflow, etc. Mais ça c'est le travail de l'interpréteur, pas du programmeur. Le programmeur code en ayant la sémantique de python en tête, il s'en fiche de ce qui se passe derrière. En rajoutant cette couche d'abstraction, on perd en rapidité d'exécution comme tu l'as remarqué, mais on gagne en sûreté : on a moins de bugs, et on code plus vite.

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment