Merci pour tes commentaires.
J’ai de mon côté commencé une relecture et commencé à corriger quelques fautes et mauvaises formulations.
En fait, j’hésitais déjà à présenter le module, me demandant s’il était vraiment à sa place dans le cours, ce dernier ayant surtout vocation à montrer comment implémenter ses structures que documenter l’existant.
Je vais voir ce que je peux faire, mais je n’ai pas envie d’alourdir trop cette section, alors qu’elle n’est à la base qu’une annexe du chapitre Conteneurs.
Je pourrais essayer d’en toucher un mot, oui. Mais c’est souvent délicat de parler de Python et de la mémoire.
Ce que je vais dire là est à prendre avec des pincettes, je ne suis pas allé voir dans les sources ce qu’il en était réellement.
Je dirais que c’est surtout qu’il est inutile d’utiliser ==
alors que is
fait le travail, plus simplement.
is
n’a qu’à comparer les adresses des deux objets là où ==
doit localiser la méthode __eq__
puis l’appeler, et c’est celle-ci qui utilisera is
en dernier lieu.
Le résultat serait le même, mais ça évite des appels inutiles.
Et je ne sais pas s’il n’y a pas quelque part des objets qui seraient égaux à None
, sans être None
.
Je ne trouvais pas ça forcément pertinent, mais je peux ajouter un commentaire dessus.
Si, je corrigerai.
Elle me semble tout de même assez complexe. Elle fait intervenir de l’aléatoire et réserve un sort particulier pour les nombres.
Peut-être, je voulais attendre d’avoir expliqué l’utilité avant d’en venir à l’implémentation. Je regarderai quelle tête ça peut avoir en inversant les sections. Ou alors juste remonter la remarque sur les mutables ?
L’implémentation d’__eq__
dans une classe fait automatiquement disparaître le __hash__
par défaut (enfin, c’est plutôt que le __hash__
par défaut n’est pas ajouté si __eq__
est redéfinie).
C’est assez difficile de trouver une autre utilisation de hash
en Python que pour les ensembles et les dictionnaires (qui reflètent les deux la même utilisation).
Mais ça peut bien sûr optimiser le calcul de l’égalité entre deux objets, si le hash est stocké en cache (puisque invariable) : si les hashs sont différents, on sait déjà que les objets sont différents.