Variables et adresses mémoire

PythonPythonBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce tutoriel, nous allons explorer les variables Python, les adresses mémoire et les différences entre les types de données immuables et mutables :

  • Types de données immuables : Ces types de données ne peuvent pas être modifiés après leur création. Des exemples sont int, float, str, tuple et frozenset.
  • Types de données mutables : Ces types de données peuvent être modifiés après leur création. Des exemples sont list, dict et set.

Avec les types de données immuables, tout changement entraîne la création d'un nouvel objet, tandis que les types de données mutables peuvent être modifiés en place. Comprendre cette distinction est crucial lorsqu'on travaille avec les adresses mémoire et l'affectation de variables.

Nous aborderons l'affectation de variables, les caractéristiques des types de données immuables et mutables, et l'opérateur is pour comparer les adresses mémoire. Commençons!


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python/BasicConceptsGroup -.-> python/variables_data_types("Variables and Data Types") python/BasicConceptsGroup -.-> python/numeric_types("Numeric Types") python/BasicConceptsGroup -.-> python/strings("Strings") python/BasicConceptsGroup -.-> python/type_conversion("Type Conversion") python/DataStructuresGroup -.-> python/lists("Lists") python/FunctionsGroup -.-> python/scope("Scope") python/PythonStandardLibraryGroup -.-> python/data_collections("Data Collections") subgraph Lab Skills python/variables_data_types -.-> lab-7849{{"Variables et adresses mémoire"}} python/numeric_types -.-> lab-7849{{"Variables et adresses mémoire"}} python/strings -.-> lab-7849{{"Variables et adresses mémoire"}} python/type_conversion -.-> lab-7849{{"Variables et adresses mémoire"}} python/lists -.-> lab-7849{{"Variables et adresses mémoire"}} python/scope -.-> lab-7849{{"Variables et adresses mémoire"}} python/data_collections -.-> lab-7849{{"Variables et adresses mémoire"}} end

Affectation de variables et adresses mémoire

En Python, les variables ne sont que des références vers les emplacements mémoire où les valeurs sont stockées. Lorsque vous affectez une valeur à une variable, Python crée un nouvel objet (le cas échéant) et fait en sorte que la variable référence cet objet.

Ouvrez d'abord l'interpréteur Python :

python

Voyons un exemple :

x = 10
y = x

Dans cet exemple, la variable x est affectée à la valeur 10. Lorsque nous affectons x à y, les deux variables référencent maintenant le même emplacement mémoire. Nous pouvons vérifier cela en utilisant la fonction id() :

print(id(x))  ## Sortie : adresse mémoire de x
print(id(y))  ## Sortie : adresse mémoire de y, qui devrait être la même que x

L'opérateur is

En Python, l'opérateur is compare les adresses mémoire de deux objets. Si les adresses mémoire sont les mêmes, l'opérateur is renvoie True ; sinon, il renvoie False. Cela est différent de l'opérateur ==, qui compare les valeurs des objets.

x = [1, 2, 3]
y = x
z = [1, 2, 3]

print(x is y)  ## Sortie : True (x et y ont la même adresse mémoire)
print(x is z)  ## Sortie : False (x et z ont des adresses mémoire différentes)

Comparez les adresses mémoire

Dans cette étape, nous allons comparer les adresses mémoire de variables ayant la même valeur.

Veuillez suivre les instructions ci-dessous :

## Créez deux variables entières `a` et `b` ayant la même valeur.
a = 10
b = 10
## Créez deux variables de liste `c` et `d` ayant les mêmes éléments.
c = [1, 2, 3]
d = [1, 2, 3]

## Comparez les adresses mémoire de `a` et `b`, ainsi que de `c` et `d`.
print(a is b)  ## Sortie : True
print(c is d)  ## Sortie : False

Dans l'exemple ci-dessus, nous avons créé deux variables entières a et b ayant la même valeur.

Nous avons également créé deux variables de liste c et d ayant les mêmes éléments.

Lorsque nous avons comparé les adresses mémoire de a et b, l'opérateur is a renvoyé True. Cela est dû au fait que a et b partagent la même adresse mémoire.

Cependant, lorsque nous avons comparé les adresses mémoire de c et d, l'opérateur is a renvoyé False. Cela est dû au fait que c et d ont des adresses mémoire différentes.

Alors, que signifie cela?

  1. Les types de données immuables ayant la même valeur peuvent avoir la même adresse mémoire.
  2. Les types de données mutables ayant la même valeur ont des adresses mémoire différentes.

Modifier un type de données mutable

Ensuite, nous allons créer et modifier un type de données mutable ensemble.

## Créez deux variables `x` et `y` qui référencent la même liste.
x = [1, 2, 3]
y = x

## Modifiez la liste à l'aide de la variable `x`.
x.append(4)

## Observez les modifications de la variable `y`.
print(y)  ## Sortie : [1, 2, 3, 4] (y reflète également les modifications car x et y partagent la même adresse mémoire)

Dans cet exemple, nous avons créé deux variables x et y qui référencent la même liste.

Lorsque nous avons modifié la liste à l'aide de la variable x, les modifications ont également été reflétées dans la variable y. Cela est dû au fait que x et y partagent la même adresse mémoire.

Modifier un type de données immuable

Enfin, modifions ensemble successivement un type de données immuable.

## Créez deux variables `a` et `b` qui référencent la même chaîne de caractères.
a = "hello"
b = a

## Modifiez la chaîne de caractères à l'aide de la variable `a`.
a = a + ", world"

## Observez les modifications de la variable `b`.
print(b)  ## Sortie : "hello" (b ne change pas car un nouvel objet a été créé lors de la modification de la chaîne de caractères)

Dans cet exemple, nous avons créé deux variables a et b qui référencent la même chaîne de caractères.

Lorsque nous avons modifié la chaîne de caractères à l'aide de la variable a, les modifications n'ont pas été reflétées dans la variable b. Cela est dû au fait que a et b ont des adresses mémoire différentes.

Sommaire

Dans ce tutoriel avancé, nous sommes allés plus loin dans l'étude des variables Python et des adresses mémoire. Nous avons discuté de l'affectation de variables, des types de données mutables et immuables, et de l'opérateur is pour comparer les adresses mémoire. Nous avons également pratiqué ces concepts avec des exercices pratiques. Comprendre ces concepts avancés vous aidera à devenir un programmeur Python plus compétent, car cela vous donne une vision plus approfondie de la manière dont Python gère la mémoire et de la façon dont les variables fonctionnent au niveau le plus profond.