7 votes

Pourquoi différentes chaînes ont-elles le même ID en Python?

Il est indiqué que les chaînes de caractères sont des objets immuables, et lorsque nous apportons des modifications à cette variable, cela crée en réalité un nouvel objet chaîne de caractères.

Alors, je voulais tester ce phénomène avec ce morceau de code:

result_str = ""

print("chaîne 1 (non modifiée):", id(result_str))

for a in range(1,11):
    result_str = result_str + str(a)
    print(f"chaîne {a+1}:", id(result_str))

Et j'ai obtenu les ID suivants:

chaîne 1 (non modifiée): 2386354993840
chaîne 2: 2386357170336
chaîne 3: 2386357170336
chaîne 4: 2386357170336
chaîne 5: 2386357170336
chaîne 6: 2386357170336
chaîne 7: 2386357170336
chaîne 8: 2386357170336
chaîne 9: 2386360410800
chaîne 10: 2386360410800
chaîne 11: 2386360410800

Alors, si chaque chaîne est différente des autres, pourquoi les chaînes 2-8 et 9-11 ont-elles le même ID? Et, si d'une certaine manière cette question est expliquée, pourquoi l'ID change-t-il spécifiquement à la chaîne 9?

3voto

Balaji Ambresh Points 4662

La chaîne que vous associez à result_str atteint la fin de sa durée de vie à la prochaine affectation. D'où la possibilité d'un identifiant en double.

Voici la doc

Retourne l' "identité" d'un objet. Il s'agit d'un entier qui est garanti d'être unique et constant pour cet objet pendant sa durée de vie. Deux objets avec des durées de vie non chevauchantes peuvent avoir la même valeur id().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X