Premier code :
# -*- coding:gb2312 -*-
a = [100]
def test(num):
num += num #第一段代码
print(num)
test(a)
print(a)
Résultat de l'exécution :
Deuxième code :
# -*- coding:gb2312 -*-
a = [100]
def test(num):
num = num + num #这个地方改了一下
print(num)
test(a)
print(a)
Résultat de l'exécution :
Ma question :
num += num ne devrait pas être directement équivalent à mun = num+num Pourquoi les résultats calculés sont-ils différents ? Que se passe-t-il
Vous pouvez essayer de faire quelque chose comme ça,
L'adresse mémoire allouée à la variable peut être obtenue via la fonction id(). Grâce à des expériences, il a été constaté que l'adresse de la variable utilisant
+
a changé, c'est ce que vous avez dit num+=num et num=num+numne sont pas équivalents.Cependant, lorsque vous effectuerez les opérations sexy suivantes, vous vous retrouverez giflé
L'adresse attribuée semble changer tout le temps.
La raison en est que les structures de données en Python sont divisées en mutables et immuables.
Pour les types de variables, = et += sont évidemment différents, comme le montre la liste ci-dessus :
+ représente une opération de connexion, += représente un ajout
Pour les types immuables, = et += sont les mêmes opérations, comme le tuple ci-dessus
L'essence des types variables et des types immuables réside dans la question de savoir si l'espace mémoire est variable ~
La première chose à remarquer est la différence
Vous pouvez voir que les méthodes appelées sont différentes, ce sont __add__, __iadd__
L'opérateur d'addition calculera un nouvel objet à affecter à num
L'opérateur d'affectation incrémentielle modifie la référence d'origine
Référence ici : https://stackoverflow.com/que...
N'oubliez pas que les arguments sont passés par affectation en Python
.En Python, l'affectation est utilisée pour transmettre des paramètres, pas une référence, donc lorsque vous transmettez a à une fonction, vous transmettez la valeur de a, pas a elle-même. Si vous souhaitez modifier a lui-même, vous devez utiliser return pour renvoyer la valeur
Résultat :
En python, a=a+b consiste d'abord à créer un nouvel objet et à laisser la variable a faire référence à cet objet. a+=b consiste à changer la valeur de l'objet référencé par a en la valeur de a+b
.