Objektkennungen in Python
›id‹ wurde schon in der Lektion zur Introspektion vorgestellt, aber vielleicht beim Lesen oder im Kurs übersprungen.
Jedes Objekt hat eine ganze Zahl als Kennung.
Zu einem bestimmten Zeitpunkt haben niemals zwei Objekte die gleiche Kennzahl.
Während seiner Existenz hat jedes Objekt immer dieselbe Kennzahl.
Diese Kennzahlen erlauben es uns, die Identität von Objekten zu verfolgen.
Die Kennzahl eines Objektes wird durch den Funktor ›id‹ geliefert.
Das Anhängen eines Wertes ändert nichts an der Identität der Liste.
Die Liste ist immer noch dasselbe System – nur ihr Zustand hat sich verändert. (Diese Begriffe „System“ und „Zustand“ wurde am Anfang des Kurses vorgestellt.)
- Konsolenprotokoll
l =[ 0, 1, 2 ]
l
[0, 1, 2]
id( l )
4720
l.append( 'abc' )
l
[0, 1, 2, 'abc']
id( l )
4720
Die Verbindung zweier Listen mit »+« erzeugt hingegen eine neue Liste.
Wir ändern damit also nicht den Zustand eines Systems, sondern erzeugen ein neues System.
Dies zeigt sich dann auch an der Kennung.
- Konsolenprotokoll
l =[ 0, 1, 2 ]
l
[0, 1, 2]
id( l )
4720
l = l +[ 'abc' ]
l
[0, 1, 2, 'abc']
id( l )
4740
Weitere Listenoperationen
Das Anhängen einer Bindungsstelle ist mit der Methode ›append‹ möglich.
- Konsolenprotokoll (mit symbolischen Kennungen)
l =[ 20, 21, 22 ]
print( id( l ))
1
l.append( "ab" )
print( l )
[20, 21, 22, 'ab']
print( id( l ))
1
Zum Anhängen einer anderen Liste kann »+« verwendet werden, allerdings entsteht dabei eine neue Liste, während die ursprüngliche Liste nicht verändert wird.
- Konsolenprotokoll
l =[ 20, 21, 22 ]
print( id( l ))
1
l = l +[ 'ab' ]
print( l )
[20, 21, 22, 'ab']
print( id( l ))
2
Bei Verwendung des Verbundoperators »+=« wird das Objekt der linken Seite aber beibehalten, falls möglich.
- Konsolenprotokoll
l =[ 20, 21, 22 ]
print( id( l ))
1
l +=[ 'ab' ]
print( l )
[20, 21, 22, 'ab']
print( id( l ))
1
- Konsolenprotokoll
l =( 20, 21, 22 )
print( id( l ))
1
l +=( 'ab', )
print( l )
(20, 21, 22, 'ab')
print( id( l ))
2