2**10 is 2**10?

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
pythonsnake
User
Beiträge: 2
Registriert: Sonntag 31. Oktober 2010, 12:28

Hallo,
ich habe eine Frage. Warum ist 2**10 is 2**10 false.
und z.B 2**5 is 2**5 true?
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Kleiner Tipp: Rechengenauigkeit, bzw. Darstellung von Zahlen.
I'm not getting paid for being Mr. Nice Guy!
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

querdenker hat geschrieben:Kleiner Tipp: Rechengenauigkeit, bzw. Darstellung von Zahlen.
Ganz falsche Richtung. Das sind Ganzzahlen.

CPython erzeugt beim Start die Zahlen 0 bis 2^8 und verwendet sie danach wieder. Fuer andere Zahlen gilt das nicht.
pythonsnake
User
Beiträge: 2
Registriert: Sonntag 31. Oktober 2010, 12:28

aha. der python-interpreter "rechnet" 2**10 gar nicht aus?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Aeh doch?

Code: Alles auswählen

>>> 2 ** 10
1024
Das gilt auch fuer den Zahlenbereich 0..2^8 den ich angesprochen habe, nur werden dort keine neuen Zahlenobjekte erzeugt sondern die bereits vorliegenden wiederverwendet.

http://www.python-forum.de/viewtopic.php?f=1&t=24369
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

pythonsnake hat geschrieben:aha. der python-interpreter "rechnet" 2**10 gar nicht aus?
Ja eben doch! Nur tut er das zwei mal und hat damit zwei unterschiedliche Objekte!

Bei Zahlen bis 255 liegen diese Objekte im Speicher und werden damit wie aus einem Cache benutzt. Damit ist das Ergebnis von 2**5 eben immer exakt dasselbe Objekt im Speicher und die Objektidentität ist eben gegeben!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

pythonsnake hat geschrieben:Hallo,
ich habe eine Frage. Warum ist 2**10 is 2**10 false.
und z.B 2**5 is 2**5 true?
Kann dir im Grunde genommen egal sein, da das Ergebnis deiner Ausdrücke nicht festgelegt ist und somit je nach Implementierung variieren kann.

Du stellst mit `is` die falsche Frage. Mit `is` testest ob zwei Objekte identisch sind. Interessieren wird dich aber nur, ob sie äquivalent sind. Dafür benutzt man `==` und damit kommt auch beide Male `True` raus.
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Teusche ich mich da oder werden in diesem Forum überwiegend gleiche Fragen gestellt?
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Py-Prog hat geschrieben:Teusche ich mich da oder werden in diesem Forum überwiegend gleiche Fragen gestellt?
Na, diese Frage kam aber noch nicht so oft, als das er nervte ;-) Zudem ist es eine der interessanteren.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Hyperion hat geschrieben:Na, diese Frage kam aber noch nicht so oft, als das er nervte ;-) Zudem ist es eine der interessanteren.
stimmt, ich wusste es auch noch nicht.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Py-Prog hat geschrieben:Teusche ich mich da oder werden in diesem Forum überwiegend gleiche Fragen gestellt?
Deine Frage kommt jedenfalls zum ersten Mal.
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Xynon1 hat geschrieben:
Hyperion hat geschrieben:Na, diese Frage kam aber noch nicht so oft, als das er nervte ;-) Zudem ist es eine der interessanteren.
stimmt, ich wusste es auch noch nicht.
Ich weiß das doch auch nur weil ich einen Früheren Thread darüber gelesen habe.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Antworten