Python a + = b et a = a + b sont différents

Certains sites disent que l'opérateur ʻa + = b est le même que ʻa = a + b, mais ce n'est pas exactement le même pour les objets mutables. Soyez prudent si vous avez des variables qui pointent vers le même objet. (Surtout pour ceux qui utilisent NumPy!)

Aperçu

En un mot, il existe les différences suivantes. Pour les objets mutables,

--Dans ʻa + = b, l'objet pointé par ʻa ne change pas avant et après l'affectation. --Lorsque ʻa = a + b, l'objet pointé par ʻa change avant et après l'affectation.

Cependant, pour les objets immuables, cela change dans les deux cas (le commentaire de @ shiracamus a un exemple).

Expérience

Expérimentons pour créer «[1, 2, 3]» en ajoutant «[3]» à «[1, 2]». «y» fait référence à l'objet de «x» avant l'affectation. Vous pouvez obtenir l'ID d'un objet avec la fonction intégrée ʻid (x) `.

a += b

>>> x = y = [1, 2]  #y est le même objet que x avant l'affectation
>>>
>>> id(x)
4397797440
>>> id(y)
4397797440
>>>
>>> x += [3]
>>> 
>>> x
[1, 2, 3]
>>> y  #Également ajouté à y
[1, 2, 3]
>>>
>>> id(x)  #Même objet qu'avant l'affectation
4397797440
>>> id(y)
4397797440

a = a + b

>>> x = y = [1, 2]  #y est le même objet que x avant l'affectation
>>>
>>> id(x)
4397797440
>>> id(y)
4397797440
>>>
>>> x = x + [3]
>>> 
>>> x
[1, 2, 3]
>>> y  #Non ajouté à y
[1, 2]
>>>
>>> id(x)  #Pointant vers un autre objet qu'avant l'affectation
4395937472
>>> id(y)
4397797440

Recommended Posts

Python a + = b et a = a + b sont différents
[Python] renvoie A [ou / et] B
[Python3] "A // B" et "math.floor (A / B)" ne sont pas toujours les mêmes! ??
Python3> rond (a --b, 7)
python memo- "sinon A et B" était "si (pas A) et B"
Le VIF calculé par Python et le VIF calculé par Excel sont différents .. ??
Explication ABC127 A, B, C (python)
la matrice et le tapis de numpy sont différents
Différent du type d'importation de python. Signification de depuis A import B
[Python] Que sont @classmethod et les décorateurs?
a () et a .__ call__ () ne sont pas équivalents
Créez le code qui renvoie "A et prétendant B" en python
ABC128 Commentaire A, B, C (python)
Explication ABC126 A, B, C (python)
l'expression régulière de python, str et unicode sont sobres et addictives
Résoudre ABC175 A, B, C avec Python
Les modules et packages en Python sont des "espaces de noms"
Un mémo contenant Python2.7 et Python3 dans CentOS
Connectez beaucoup de Python ou et et
python> Arguments de mot clé> hoge (** {'a': 1, 'b': 2, 'c': 3})
yum et apt update / upgrade sont différents
Résoudre ABC165 A, B, D avec Python
Une histoire sur Python pop and append
Python open et io.open sont les mêmes
Organisez les modules et les packages Python dans le désordre
Construire un environnement python avec virtualenv et direnv
La réponse de "1/2" est différente entre python2 et 3
Un joli nimporter qui connecte nim et python
Comment fonctionnent les classes python et les méthodes magiques.
ffmpeg-Construisez un environnement python et divisez la vidéo
J'ai écrit une classe en Python3 et Java
Pourquoi je suis une boutique Java et démarre Python
Créer une carte Web en utilisant Python et GDAL
Lancer un serveur Web avec Python et Flask
Que comparez-vous avec Python et ==?
Écrivons un programme Python et exécutons-le
Une histoire sur la modification de Python et l'ajout de fonctions
[Python] Une compréhension approximative des itérables, des itérateurs et des générateurs
Prise en compte des forces et faiblesses de Python
Que sont les taples et * args python après tout?
Langage C pour voir et se souvenir de la partie 3 Appelez le langage C depuis Python (argument) c = a + b
[python] Compresser et décompresser
Algorithme A * (édition Python)
Astuces Python et Numpy
[Python] pip et roue
[Python] Prenez une capture d'écran
Python: création d'un environnement virtuel (venv), démarrage et arrêt
Essayez de créer un fichier compressé en utilisant Python et zlib
Créer un module Python
Itérateur et générateur Python
Création d'un environnement de travail Docker R et Python
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
expression lambda de python ...
Paquets et modules Python
Intégration Vue-Cli et Python
Ce serait sage si vous pouviez écrire quelque chose comme booléen et "A" ou "B" [Python] [Mais]
Les classes Python sont lentes
Ruby, Python et carte