La différence entre une copie et une vue
Dans NumPy, une copie est un tableau entièrement nouveau avec ses propres données, tandis qu'une vue est une nouvelle façon de visualiser les mêmes données. Modifier une vue affectera le tableau d'origine, mais modifier une copie ne le fera pas.
Voyons cela en pratique. Nous allons créer un tableau, puis en faire une vue et une copie. Nous modifierons ensuite les deux et observerons l'effet sur le tableau d'origine.
Tout d'abord, ouvrez le fichier main.py depuis l'explorateur de fichiers à gauche. Ensuite, remplacez son contenu par le code suivant :
import numpy as np
## --- Partie 1 : Modification d'une vue ---
print("--- Modifying a View ---")
## Créer un tableau original
original_array_view = np.array([1, 2, 3, 4, 5])
print(f"Original array: {original_array_view}")
## Créer une vue du tableau
view_array = original_array_view.view()
## Modifier le premier élément de la vue
view_array[0] = 99
print(f"View after modification: {view_array}")
print(f"Original array after modifying the view: {original_array_view}\n")
## --- Partie 2 : Modification d'une copie ---
print("--- Modifying a Copy ---")
## Créer un autre tableau original
original_array_copy = np.array([10, 20, 30, 40, 50])
print(f"Original array: {original_array_copy}")
## Créer une copie du tableau
copy_array = original_array_copy.copy()
## Modifier le premier élément de la copie
copy_array[0] = 999
print(f"Copy after modification: {copy_array}")
print(f"Original array after modifying the copy: {original_array_copy}")
Maintenant, enregistrez le fichier et exécutez-le depuis le terminal pour voir la sortie.
python main.py
Vous devriez voir la sortie suivante. Remarquez comment le tableau d'origine a changé lorsque sa vue a été modifiée, mais est resté inchangé lorsque sa copie a été modifiée.
--- Modifying a View ---
Original array: [1 2 3 4 5]
View after modification: [99 2 3 4 5]
Original array after modifying the view: [99 2 3 4 5]
--- Modifying a Copy ---
Original array: [10 20 30 40 50]
Copy after modification: [999 20 30 40 50]
Original array after modifying the copy: [10 20 30 40 50]
Cela démontre la différence fondamentale : une vue est liée aux données d'origine, tandis qu'une copie est complètement indépendante.