[PYTHON] À propos de l'attribution cumulative de la liste et du tableau numpy

Si l'objet peut être modifié

Liste Python, dans un tableau numpy a = a + b ʻA + = b` (appelée affectation cumulative) Il est à noter que le comportement de est différent.

Dans l'affectation cumulative Python, effectuez des opérations sur place si possible. Autrement dit, si le contenu de l'objet peut être modifié, un nouvel objet n'est pas créé.

Par conséquent, il est important que l'objet soit mutable ou immuable. Les types numériques sont des objets immuables et les listes sont des objets modifiables.

Expérimentez avec la fonction id

Il existe une fonction id en tant que fonction intégrée de Python. Vous pouvez obtenir la valeur d'identification de l'objet en utilisant la fonction id. La valeur d'identification est garantie unique et constante pendant toute la durée de vie de l'objet. Donc, je vais expliquer la différence entre les deux en utilisant cette fonction id.

Type numérique

D'abord à partir de ʻa + = 1`.

test1.py


a = 1
print (id(a))
a += 1
print (id(a))

test1.résultat d'exécution py


1663828464
1663828496

On peut voir que la valeur d'identification de a a changé. En Python, les types numériques sont des objets immuables, Ceci est dû au fait que la destination de référence d'un change en fonction du traitement de ʻa + = 1. Ensuite, regardons ʻa = a + 1.

test2.py


a = 1
print (id(a))
a = a + 1
print (id(a))

test2.résultat d'exécution py


1656226288
1656226320

Après tout, on peut voir que la valeur d'identification de a a changé. Il ne devrait y avoir aucun problème pour l'instant.

liste

C'est le sujet principal.

test3.py


a = [0,1,2]
b = [2,3,4]
print (id(a))
a  =  a + b
print (id(a))

test3.résultat d'exécution py


53560776
53560200

La valeur d'identification de a a changé. prochain,

test4.py


a = [0,1,2]
b = [2,3,4]
print (id(a))
a  += b
print (id(a))

test4.résultat d'exécution py


53560008
53560008

Cette fois, la valeur d'identification de a n'a pas changé.

tableau numpy

J'omettrai les résultats expérimentaux de la séquence numpy car ce sera fastidieux. Le résultat est similaire à une liste régulière. Le tutoriel officiel de numpy indique également ce qui suit.

Arithmetic operators on arrays apply elementwise. A new array is created and filled with the result.

Some operations, such as += and *=, act in place to modify an existing array rather than create a new one.

Résumé

a = a + b a += b Il est à noter que la description telle que n'est pas toujours équivalente.

Recommended Posts

À propos de l'attribution cumulative de la liste et du tableau numpy
À propos de tout numpy
À propos de l'attribution de numpy.ndarray
À propos de l'erreur d'importation de numpy et scipy dans anaconda
À propos de tout numpy (2e)
À propos du tableau Numpy et d'un tableau
Comment trier une liste de tableaux 2D, de dictionnaires et de classes propriétaires
À propos de numpy
À propos de _ et __
À propos de la justification gauche et de la justification droite de Kivy Label
À propos du comportement de copy, deepcopy et numpy.copy
Spécification de la plage des tableaux ruby et python
À propos des copies superficielles et profondes de Python / Ruby
À propos des problèmes et des solutions d'OpenPyXL (version Ver 3.0)
list et numpy
À propos de la diffusion Numpy
Pensez à la nouvelle génération de Rack et WSGI
Notes personnelles sur l'intégration de vscode et anaconda
[Python] Chapitre 01-02 À propos de Python (Exécution et installation de l'environnement de développement)