Gleiche Referenz bei zwei Definitionen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
BigEd
User
Beiträge: 2
Registriert: Dienstag 5. Januar 2021, 15:11

Hallo,

bin neu im Bereich Programmierung und Python und habe folgendes Problem:
Im REPL definiere ich

Code: Alles auswählen

a = 10
b = 10

und bei der Prüfung auf Werte-Gleichheit:

Code: Alles auswählen

a == b 
liefert tue

Code: Alles auswählen

a is b
liefert auch true und die id's von a und b sind auch gleich, aber ich dachte, dass dies nur dann der Fall wäre, wenn ich folgendes definiere:

Code: Alles auswählen

a = b = 10
Optimiert hier Python, so dass nur ein Objekt mit 2 darauf verweisenden Referenzen vorhanden ist oder mache ich hier einen gedanklichen Fehler?

Vielen Dank für eure Hilfe

BigEd
Benutzeravatar
ThomasL
User
Beiträge: 1379
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Google mal nach Python Small Integer Caching

Integer Objekte mit Werten von -5 bis 256 werden beim Start erzeugt und geteilt
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Bei CPython und eventuell ist der Wertebreich auch bei verschiedenen CPython-Versionen unterschiedlich. Das ist ein Implementierungsdetail.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
narpfel
User
Beiträge: 691
Registriert: Freitag 20. Oktober 2017, 16:10

Code: Alles auswählen

>>>> a = 42 ** 42 * 42 + 42
>>>> b = 42 ** 42 * 42 + 42
>>>> a == b
True
>>>> a is b
True
>>>> id(a) == id(b)
True
>>>> a is 2 * int(str(b // 2))
True
Bei unveränderbaren Objekten ist es generell ein Implementierungsdetail, ob zwei gleiche Werte überhaupt jemals unterschiedliche Identitäten haben. Man kann sie ja eh nicht verändern und/oder sonst irgendwie unterscheiden.
BigEd
User
Beiträge: 2
Registriert: Dienstag 5. Januar 2021, 15:11

Hallo
und vielen Dank für eure Antworten.
Ich habe die oben genannten "Tests" mit allen unveränderlichen Typen vollzogen und ein äquivalentes Verhalten festgestellt (Python 3.9), was anscheinend eine Art Optimierung darstellt.
Damit kann man doch arbeiten.

Vielen Dank und viele Grüße
BigEd
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Kann man eben nicht damit arbeiten. Weil es ein Implementierungsdetail ist, ist es völlig irrelevant. Vergleiche macht man mit ==.
Antworten