Seite 1 von 1
Gleiche Referenz bei zwei Definitionen
Verfasst: Dienstag 5. Januar 2021, 15:33
von BigEd
Hallo,
bin neu im Bereich Programmierung und Python und habe folgendes Problem:
Im REPL definiere ich
und bei der Prüfung auf Werte-Gleichheit:
liefert tue
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:
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
Re: Gleiche Referenz bei zwei Definitionen
Verfasst: Dienstag 5. Januar 2021, 17:33
von ThomasL
Google mal nach Python Small Integer Caching
Integer Objekte mit Werten von -5 bis 256 werden beim Start erzeugt und geteilt
Re: Gleiche Referenz bei zwei Definitionen
Verfasst: Dienstag 5. Januar 2021, 18:08
von __blackjack__
Bei CPython und eventuell ist der Wertebreich auch bei verschiedenen CPython-Versionen unterschiedlich. Das ist ein Implementierungsdetail.
Re: Gleiche Referenz bei zwei Definitionen
Verfasst: Dienstag 5. Januar 2021, 22:29
von narpfel
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.
Re: Gleiche Referenz bei zwei Definitionen
Verfasst: Mittwoch 6. Januar 2021, 09:31
von BigEd
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
Re: Gleiche Referenz bei zwei Definitionen
Verfasst: Mittwoch 6. Januar 2021, 11:26
von Sirius3
Kann man eben nicht damit arbeiten. Weil es ein Implementierungsdetail ist, ist es völlig irrelevant. Vergleiche macht man mit ==.