À propos des variables et des objets Python

■ À propos des variables

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 n1.png

Alternativement, le "nom de variable" peut être considéré comme une image de type balise définie dans la valeur.

◎ Figure n2 n2.png

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 n3.png

■ Vérifiez l'ID de l'objet avec la fonction id ()

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

■ Lors de la réaffectation d'une valeur à une variable

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)

■ Des valeurs mutables et immuables

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 ②.

■ La liste est modifiable, taple est immuable

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

■ Les chaînes de caractères sont également immuables

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

À propos des variables et des objets Python
À propos de Python, len () et randint ()
À propos de la date et du fuseau horaire Python
Variables de classe et d'instance Python
Variables Python et ID d'objet
À propos de Python et des expressions régulières
À propos des opérations Python et OS
Python # À propos de la référence et de la copie
À propos de Python sort () et reverse ()
Premiers pas avec python3 # 2 En savoir plus sur les types et les variables
[Python] Variables
À propos de _ et __
À propos de l'installation des séries Pwntools et Python2
objet perl et classe python partie 2.
À propos de Python dict et des fonctions triées
À propos de Python et Cython dtype
Affectations et modifications des objets Python
À propos de Python Pickle (cPickle) et Marshal
[Python] À propos des classes Executor et Future
À propos de Python, à partir et à l'importation, comme
objet perl et classe python partie 1.
À propos des tranches Python
À propos de la notation d'inclusion de python
[Python] Utiliser et et ou lors de la création de variables
À propos de Python tqdm.
À propos du rendement Python
À propos de python, classe
À propos de l'héritage Python
À propos de python, range ()
À propos de Python Decorator
Une histoire sur Python pop and append
À propos de la référence Python
À propos des décorateurs Python
[Python] À propos du multi-processus
Parler d'anciennes et de nouvelles classes en Python
Parler des attributs de classe Python et des métaclasses
[Introduction à Python3 Jour 12] Chapitre 6 Objets et classes (6.3-6.15)
Variables Python et types de données appris avec la chimio-automatique
[python] Différence entre variable et self. Variable dans la classe
Une histoire accro aux variables globales et à la portée de Go
Pensez aux recherches de priorité de profondeur et de priorité de largeur en Python
À propos de la différence entre "==" et "is" en python
[Introduction à Python3 Jour 11] Chapitre 6 Objets et classes (6.1-6.2)
[Python] Chapitre 02-01 Bases des programmes Python (opérations et variables)
Problème avec les variables pseudo-privées Python et l'héritage de classe
Une histoire sur la modification de Python et l'ajout de fonctions
[Python] En savoir plus sur la programmation asynchrone et les boucles d'événements
À propos des copies superficielles et profondes de Python / Ruby
[python] Compresser et décompresser
À propos de la classe et de l'instance
Variables de numérotation des mémorandums Python
À propos des arguments de fonction (python)
Variables globales et locales 2
Itérateur et générateur Python
Paquets et modules Python
Intégration Vue-Cli et Python
[Python] Mémo sur les fonctions