Comprendre les objets Python

Visualiser les références et les copies en Python

Ce visualiseur de copies en Python montre pourquoi une modification faite avec b peut aussi être visible depuis a. Suivez les références entre les variables et les listes, puis comparez l’affectation, la copie superficielle et la copie profonde.

Choisissez l’un des trois boutons d’exemple, puis avancez avec Étape suivante, juste sous le résultat. Chaque étape réunit l’instruction Python, son explication et les valeurs de a et b avant et après. Les boutons ? donnent une aide ; le schéma des références et le code complet se déplient sous la démonstration.

Gratuit, sans inscription. Les états affichés proviennent d’exécutions Python vérifiées. Les commandes parcourent ces exemples préparés ; elles ne lancent pas du code libre.

Comprendre les copies en Python et les références

Une variable Python est un nom lié à un objet. Une référence permet d’atteindre cet objet. Dans le schéma, chaque flèche relie un nom ou un élément de liste à la liste qu’il désigne.

  1. Affectation avec b = a

    Les deux noms désignent la même liste. L’affectation ne crée pas de copie. La modification d’une sous-liste ou l’ajout d’un élément est visible depuis les deux noms.

  2. Copie superficielle avec a.copy()

    La liste principale est nouvelle, mais ses éléments peuvent encore désigner les mêmes objets. Ici, les sous-listes sont partagées : modifier leur contenu affecte aussi ce que l’on voit depuis a.

  3. Copie profonde avec deepcopy(a)

    Dans cet exemple, une nouvelle liste principale et de nouvelles sous-listes sont créées pour b. Leurs valeurs sont d’abord égales à celles de a, mais leurs références sont distinctes. Les nombres entiers ne sont pas dessinés comme des objets séparés.

Les valeurs 23, 19 et 24 viennent des trois premières lignes de la colonne Hours_Studied du jeu Student Performance Factors. Elles sont regroupées en deux sous-listes pour étudier les références. Les exemples ne modifient pas le fichier source. Source des valeurs : Student Performance Factors

Ce que montre le visualiseur

Les repères L1, L2… identifient les listes dans le schéma ; ce ne sont pas des adresses mémoire réelles. Le test is compare l’identité des objets, tandis que == compare ici leurs valeurs. Revenir en arrière affiche un état précédent de la démonstration. Le schéma couvre ces listes de nombres : il ne décrit pas tous les comportements possibles de deepcopy avec des objets personnalisés.

Aperçu du visualiseur

Copies en Python : boutons des trois exemples et comparaison avant et après une modification avec une copie superficielle, avec les commandes juste sous le résultat.
Avec une copie superficielle, modifier la première sous-liste de b change aussi a. Les valeurs avant et après permettent de suivre cette modification.

Documentation Python sur les copies superficielles et profondes