Werte von Objekten in Python (Werte von Objekten in Python), Lektion, Seite 724273
https://www.purl.org/stefan_ram/pub/werte_python (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Python-Kurs

Werte von Objekten in Python 

Der Wert eines Objektes

Manchmal sollen verschiedene  Objekte die gleiche  Sache darstellen. Diese Sache wird dann als Wert  jener Objekte bezeichnet.

Beispielsweise könnte es zwei unterschiedliche  Geldscheine (Objekte) mit unterschiedlichen  Seriennummern geben, die aber beide denselben Wert  (beispielsweise 10 Euro) repräsentieren.

Wenn für zwei Ausdrücke »a« und »b« gilt, »a=b«, dann stehen sie für Objekte mit gleichem Wert.

(Es ist nicht immer möglich, den Wert eines Objektes als ein eigenes Objekt zu erhalten.)

Das folgende Protokoll zeigt zwei verschiedene  Objekte »a« und »b« mit gleichem Wert (»a == b«). (Es muß allerdings nicht unbedingt unter jeder Python -Implementation dieses Verhalten zeigen.)

Protokoll

a = 'ab'

b = 'a' + chr( 98 )

print( a )

'ab'
print( b )
'ab'
print( id( a )==id( b ))
False
print( a == b )
True

Der Wert einer Auswertung

Wir hatten schon früher den Begriff „Wert einer Auswertung“ kennengelernt.

Dieser Begriff sollte nicht mit dem jetzt eingeführten Begriff „Wert eines Objektes“ gleichgesetzt werden.

Der Wert einer Auswertung ist einfach das Ergebnis der Auswertung (es handelt sich dabei stets um ein Objekt).

Beispielsweise ist der Wert der Auswertung des Ausdrucks »2+3« ein Objekt, das den Wert «5» repräsentiert.

In diesem Kurs schreiben wir für das Objekt, welches der Wert eines Ausdrucks  »a« ist auch ‹a›. Für den Wert jenes Objektes  schreiben wir dann «a».

Lesehinweis

Oft ist es aber nicht so wichtig, diese genauen Unterscheidungen zu machen. Daher kann man trotzdem einfach weiterlesen, selbst wenn einem der Unterschied zwischen „»a«“, „›a‹“ und „«a»“ noch nicht verständlich geworden sein sollte.

Eindeutige Objekte

Für die drei speziellen Werte «True», «False» und «None» gibt es immer nur jeweils genau ein  Objekt, das sie repräsentiert, nämlich das Objekt ›True‹, ›False‹ beziehungsweise ›None‹.

Ein Zahl, wie die Zahl Zwei, könnte durch mehrere Objekte  repräsentiert werden, die alle den gleichen Wert «2» haben.

Identität und Gleichheit ⃗

Im folgenden Protokoll sind »b0« und »b1« zwei verschiedene Namen für zwei verschiedene Objekte (laut »id«), die aber beide denselben Wert (»==«) haben.

Protokoll

a = "a"

b0 = a + "b"

b1 = a + "b"

b0 == b1

True
id( b0 )
35368552
id( b1 )
35368104
id( b0 )== id( b1 )
False

Dieses Beispiel muß nicht unbedingt mit jeder Python -Implementation nachvollziehbar sein, da eine Python -Implementation zwei identische Zeichenfolgen auch zu einem Objekt zusammenziehen könnte, wie in dem folgenden Beispiel.

Protokoll

b0 = "ab"

b1 = "ab"

id( b0 )

35368384
id( b1 )
35368384
id( b0 )== id( b1 )
True

Werte und Objekte ⃗

Verschiedene  Objekte können denselben  Wert darstellen. Normalerweise gelten solche Objekte bei Vergleich mit »==« als gleichwertig.

Beispielsweise könnte es sein, daß das Numerale »5000« auf der linken  Seite eines Vergleichs für ein anderes Objekt  steht als das Numerale »5000« auf der rechten  Seite. Auf jeden Fall gelten sie aber als gleichwertig.

Auswertung
5000 == 5000
True

Der folgende Vergleich zweier lambda-Funktionen ergibt ›False‹.

Auswertung
( lambda: 2 )==( lambda: 2 )
False

Die liegt daran, daß bei Vergleich von lambda-Funktionen geprüft wird, ob beide das gleiche Objekt sind. Oben stehen die beiden lambda-Ausdrücke aber für zwei verschiedene  Objekte, obwohl beide Objekte die gleiche Berechnung durchführen. Jeder lambda-Ausdruck ergibt aber ein neues Objekt, also ein Objekt, das sich von allen anderen Objekten unterscheidet.

Es folgt noch ein anderes Beispiel, bei dem sich ›False‹ ergibt, obwohl beide Ausdrücke gleich  sind – die Ausdrücke sind einander gleich, aber nicht gleichwertig !

Auswertung

from random import random

random() == random()

False

Bindungen und Vergleiche ⃗

Nach der Bindung  eines Objektes an einen Namen ist der Name zu allen dem Objekt gleichwertigen Objekten gleichwertig.

Auswertung

x = 2

x == 2

True
Auswertung

f =( lambda: 2 )

f == f

True

g = f

g == f

True
f ==( lambda: 2 )
False
Auswertung

from random import random

x = random()

x == random()

False

»isinstance« im Vergleich mit »==« ⃗

»isinstance« sieht »True« als ein Exemplar der Klasse »int« an, da die Klasse von »True« (also »bool«) eine Unterklasse der Klasse »int« ist. Das heißt: »True« kann überall dort verwendet werden, wo ein ISBN int-Wert erwartet wird.

Auswertung
isinstance( True, int )
True

Jedes Objekt kann als Typ jedoch nur eine Klasse haben, und die Klasse von »True« ist »bool« und nicht »int«.

Auswertung
type( True )== int
False

In der Praxis braucht man »isinstance« und Typvergleiche mit »==« eher selten. Diese Möglichkeiten werden hier eher gezeigt, um das Typsystem von Python  zu illustrieren.

Zitate *

Zitat (leicht redaktionell bearbeitet) *
The chapter ‘Objects, values and types’ stated that objects have a value (in addition to type and identity).
The value of an object is a rather abstract notion in Python: For example, there is no canonical access method for an object’s value. Also, there is no requirement that the value of an object should be constructed in a particular way, e.g., comprised of all its data attributes.
Comparison operators implement a particular notion of what the value of an object is. One can think of them as defining the value of an object indirectly, by means of their comparison implementation. 
The Python Language Reference, Release 3.8.0a0

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram724273 stefan_ram:724273 Werte von Objekten in Python Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd724273, slrprddef724273, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/werte_python