Dans les langages de programmation, une variable est une zone qui stocke une certaine valeur. Pour Python, vous n'avez pas besoin de déclarer des variables avant de les utiliser. La zone est préparée lorsque vous affectez une valeur à la variable. Dans un langage orienté objet comme Python, il est préférable de considérer une variable comme une «référence» qui pointe vers la valeur de la variable plutôt que vers la valeur elle-même.
>>> name1 = "Ichiro Yamada"
◎ Figure n1
Alternativement, le "nom de variable" peut être considéré comme une image de type balise définie dans la valeur.
◎ Figure n2
Si vous affectez une variable à une autre variable, elle pointera sur la même valeur, comme indiqué ci-dessous.
>>> name1 = "Ichiro Yamada"
>>> name2 = name1
◎ Figure n3
En Python, toutes les valeurs, y compris les nombres et les chaînes, sont des objets. Utilisez la fonction id () pour trouver l'ID (valeur d'identification) d'un objet. Lorsque la fonction id () est exécutée avec le nom de la variable comme argument, l'ID de l'objet référencé est affiché. Si vous recherchez les ID des variables nom1 et nom2 avec la fonction id () dans l'exemple ci-dessus, vous pouvez voir qu'ils font référence à des objets avec le même ID.
>>> name1 = "Ichiro Yamada"
>>> name2 = name1
>>> id(name1)
4339005200 ← Même ID
>>> id(name2)
4339005200 ← Même ID
Que faire si vous réaffectez une valeur différente à une variable? Dans l'exemple suivant, d'abord, 10 est affecté à la variable num dans ①, "1" est ajouté à la valeur de la variable num dans ② et il est affecté à la variable num.
>>> num = 10 ←①
>>> num = num + 1 ←②
Dans ce cas, un nouvel objet avec une valeur de "11" est créé dans (2) et sa référence est stockée dans la variable num. En d'autres termes, dans ① et ②, la variable num pointe vers un objet différent. Cela peut être confirmé en utilisant la fonction id ().
>>> num = 10
>>> id(num)
4297538176
>>> num = num + 1
>>> id(num)
4297538208 ← ID changé (référence modifiée)
Les types de données Python sont grossièrement divisés en types "mutables" dont les valeurs peuvent être modifiées ultérieurement et en types "immuables" qui ne peuvent pas être modifiés.
Liste mutable, dictionnaire, ensemble, .... Chaînes, nombres, taples immuables, ...
En Python, les types de données de base tels que les chaînes et les nombres sont également immuables, c'est-à-dire des types qui ne peuvent pas être modifiés ultérieurement. En passant, dans l'exemple ci-dessus, 1 a été ajouté à la valeur de la variable num et réaffecté à la variable num.
>>> num = 10 ←①
>>> num = num + 1 ←②
À première vue, cela semble changer la valeur de la variable num, donc le type numérique n'est-il pas un type mutable? Vous pourriez penser, mais ce n'est pas le cas. Comme vous pouvez le voir dans le résultat de l'exécution de la fonction id (), la variable num pointe vers des valeurs différentes dans ① et ②.
Maintenant, en Python, une "liste" est un mutable, c'est-à-dire un type dont la valeur peut être modifiée ultérieurement. L'exemple suivant génère une liste «âges» avec trois entiers comme éléments et modifie le troisième élément.
>>> ages = [1, 2, 3]
>>> ages[2] = 4
>>> ages
[1, 2, 4]
En regardant la fonction id (), il va sans dire que l'ID n'a pas changé même après avoir changé la valeur de l'élément.
>>> ages = [1, 2, 3]
>>> id(ages)
4338960072
>>> ages[2] = 4
>>> id(ages)
4338960072 ← L'ID est le même
Tapuru, en revanche, est un type immuable. Tenter de modifier la valeur d'un élément entraînera une erreur.
>>> nums = (1, 2, 3)
>>> nums[0] = 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
La chaîne de caractères est également un type immuable. Par conséquent, si vous essayez de modifier les caractères internes comme suit, vous obtiendrez une erreur.
>>> str = "abc"
>>> str[1] = "d" #Le deuxième caractère est ""d"Remplacer
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
À titre d'exemple trompeur, regardons l'exemple suivant.
>>> str = "abc"
>>> str = str + "bcd" #brin"bcd"Concaténé et réaffecté à str ← ①
>>> str
'abcbcd'
Dans cet exemple, puisque la variable str et la chaîne de caractères "" bcd "" sont concaténées dans in, il semble que la chaîne de caractères a été modifiée, mais ce n'est pas le cas. Dans ①, une nouvelle chaîne de caractères "" abcbcd "" est générée, et sa référence est stockée dans la variable str. Si vous vérifiez avec la fonction id (), vous pouvez voir que l'ID a été changé après ①.
>>> str = "abc"
>>> id(str)
4301952704
>>> str = str + "bcd"
>>> id(str)
4339056968 ← ID changé
>>> str
'abcbcd'
Recommended Posts