Les explications déjà ici sont corrects. Cependant, puisque j'ai voulu abuser de Python d'une manière similaire, je vais soumettre cette méthode comme une solution de contournement.
L'appel d'un élément spécifique à partir d'une liste renvoie directement une copie de la valeur de cet élément dans la liste. Même la copie d'une sous-liste d'une liste renvoie une nouvelle référence à un tableau contenant des copies des valeurs. Considérez cet exemple:
>>> a = [1, 2, 3, 4]
>>> b = a[2]
>>> b
3
>>> c = a[2:3]
>>> c
[3]
>>> b=5
>>> c[0]=6
>>> a
[1, 2, 3, 4]
Ni b
, une valeur ne copie ni c
, une sous-liste copié à partir a
, est en mesure de modifier les valeurs en a
. Il n'y a pas de lien, malgré leur origine commune. Toutefois, les tableaux numpy utilisent une allocation de mémoire "raw-er" et permettent de renvoyer des vues de données. Une vue permet de représenter les données d'une manière différente tout en conservant l'association avec les données d'origine. Un exemple de travail est donc
>>> import numpy as np
>>> a = np.array([1, 2, 3, 4])
>>> a
array([1, 2, 3, 4])
>>> b = a[2]
>>> b
3
>>> b=5
>>> a
array([1, 2, 3, 4])
>>> c = a[2:3]
>>> c
array([3])
>>> c[0]=6
>>> a
array([1, 2, 6, 4])
>>>
Lors de l'extraction d'un seul élément encore des copies en valeur que, en conservant une vue du tableau de l'élément 2
est référencé à l'élément d'origine 2
de a
(bien qu'il soit l'élément maintenant 0
de c
), et la modification apportée à la valeur de c
change également a
.
Numpy ndarray
s ont de nombreux types différents, y compris un type d'objet générique. Cela signifie que vous pouvez conserver ce comportement "par référence" pour presque tous les types de données, et pas seulement les valeurs numériques.
Il n'y a pas de syntaxe pour faire ce que vous demandez, mais il y a beaucoup de façons de modifier une partie d'une liste.Si vous posez une question sur le problème spécifique pour lequel vous l'utilisez, quelqu'un trouvera la solution la plus intuitive et la plus élégante. – alexis