fakbill a écrit : ↑11 août 2020 23:15
Oui !
Enfin non... Ca dépend si le type est mutable ou pas.
Non, ça ne dépend pas et c'est justement l'intérêt de cette présentation : ne pas donner une perception fausse de l'affectation qui conduit ensuite à devoir tordre les choses quand on aborde les objets mutables. L'affectation se comporte de la même façon dans les deux cas ; c'est au niveau de l'objet désigné par la variable, et seulement lui, qu'il peut se passer des choses s'il est mutable.
En clair, si on peut modifier le contenu d'un objet après l'avoir créé alors a=b veut dire que a est un autre nom pour l'objet b. Si on modifie b alors a sera modifié.
C'est ce que l'affectation veut dire dans tous les cas (il faudrait préciser "objet désigné par b"). Seulement bien sûr, quand l'objet n'est pas mutable, l'éventualité qu'il soit modifié tombe à l'eau.
Avec des tuples qui ne sont donc pas modifiables, a=b veut dire 'créé une copie de l'objet b et nomme la a'.
C'est faux. D'abord b n'est pas un objet mais une variable. L'objet, c'est ce que désigne b. Quand on explique l'affectation à quelqu'un il est important de faire la distinction entre une variable et ce qu'elle désigne. Ensuite, la notion de copie d'un objet non mutable n'a pas de sens.
Surtout, c'est vraiment contre productif d'expliquer à quelqu'un que l'affectation provoquerait la création d'une copie quand l'objet en jeu est immuable et qu'au contraire elle n'en fait pas quand l'objet est mutable : ça fait apparaitre ce comportement comme bizarre et arbitraire ; ce n'est pas une façon intelligente de retenir les choses.
C'est une particularité de python cette distinction mutable/non mutable.
Je ne crois pas. D'abord parce qu'en réalité il n'y a pas de différence de comportement de l'affectation entre le cas mutable et non mutable. Ensuite, je pense que ce genre de discussion doit venir dans la plupart des langages dont le modèle mémoire est assez abstrait (rappel : en Python, il n'y a pas d'adresses mémoire).