Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.

...powered by haas.homelinux.net...

Inhaltsverzeichnis
1 Einleitung
2 Überblick über Python
3 Die Arbeit mit Python
4 Der interaktive Modus
5 Grundlegendes zu Python-Programmen
6 Kontrollstrukturen
7 Das Laufzeitmodell
8 Basisdatentypen
9 Benutzerinteraktion und Dateizugriff
10 Funktionen
11 Modularisierung
12 Objektorientierung
13 Weitere Spracheigenschaften
14 Mathematik
15 Strings
16 Datum und Zeit
17 Schnittstelle zum Betriebssystem
18 Parallele Programmierung
19 Datenspeicherung
20 Netzwerkkommunikation
21 Debugging
22 Distribution von Python-Projekten
23 Optimierung
24 Grafische Benutzeroberflächen
25 Python als serverseitige Programmiersprache im WWW mit Django
26 Anbindung an andere Programmiersprachen
27 Insiderwissen
28 Zukunft von Python
A Anhang
Stichwort

Download:
- ZIP, ca. 4,8 MB
Buch bestellen
Ihre Meinung?

Spacer
 <<   zurück
Python von Peter Kaiser, Johannes Ernesti
Das umfassende Handbuch - Aktuell zu Python 2.5
Buch: Python

Python
gebunden, mit CD
819 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1110-9
Pfeil 7 Das Laufzeitmodell
  Pfeil 7.1 Die Struktur von Instanzen
  Pfeil 7.2 Referenzen und Instanzen freigeben
  Pfeil 7.3 Mutable vs. immutable Datentypen


Galileo Computing - Zum Seitenanfang

7.3 Mutable vs. immutable Datentypen  topZur vorigen Überschrift

Vielleicht sind Sie beim Ausprobieren des gerade Beschriebenen schon auf den folgenden Scheinwiderspruch gestoßen:

>>> a = 1 
>>> b = 1 
>>> id(a) 
9656320 
>>> id(b) 
9656320 
>>> a is b 
True

Warum referenzieren a und b dieselbe Ganzzahl-Instanz, wie es der Identitätenvergleich zeigt, obwohl wir in den ersten beiden Zeilen ausdrücklich zwei Instanzen mit dem Wert 1 erzeugt haben?

Um diese Frage zu beantworten, müssen wir wissen, das Python grundlegend zwischen zwei Arten von Datentypen unterscheidet: zwischen mutable (dt. veränderlichen) Datentypen und immutable (dt. unveränderlichen) Datentypen. Wie die Namen schon sagen, besteht der Unterschied zwischen den beiden Arten darin, ob sich der Wert einer Instanz zur Laufzeit ändern kann, ob sie also veränderbar ist. Instanzen eines mutable Typs sind dazu in der Lage, nach ihrer Erzeugung andere Werte anzunehmen, während dies bei immutable Datentypen nicht der Fall ist.

Wenn sich der Wert einer Instanz aber nicht ändern kann, macht es auch keinen Sinn, mehrere immutable Instanzen des gleichen Werts im Speicher zu verwalten, weil im Optimalfall genau eine Instanz ausreicht, auf die dann alle entsprechenden Referenzen verweisen. Wie Sie sich nun sicherlich denken, handelt es sich bei Ganzzahlen eben um so einen immutable Datentyp, und Python hat aus Optimierungsgründen bei beiden Einsen auf dieselbe Instanz verweisen lassen. Auch Strings sind immutable. [Das bedeutet natürlich nicht, dass Strings und Ganzzahlen aus Sicht des Programmierers unveränderlich sind. Es wird nur bei jeder Manipulation eines immutable Datentyps eine neue Instanz des Datentyps erzeugt, anstatt die alte zu verändern. ]

Es ist allerdings nicht so, dass es immer nur genau eine Instanz zu jedem benötigten Wert eines unveränderlichen Datentyps gibt, obwohl dies theoretisch möglich wäre. Der Grund dafür liegt in der Optimierung:

Wird eine neue Instanz eines immutable Typs vom Programm angefordert, gibt es für Python zwei Möglichkeiten. Entweder wird eine neue Instanz im Speicher erstellt oder eine vorhandene ein weiteres Mal referenziert. Eine neue Instanz im Speicher zu erzeugen »kostet« Python Rechenzeit und Speicherplatz. Python muss Speicher anfordern und diesen mit den entsprechenden Informationen füllen. Eine bestehende Instanz ein weiteres Mal zu referenzieren ist um ein Vielfaches »billiger«, da sowohl das Bereitstellen als auch das Befüllen des Speichers entfallen und stattdessen nur ein Referenzzähler erhöht sowie eine Speicheradresse kopiert werden muss. Das stimmt aber nur dann, wenn der Interpreter schon weiß, an welcher Stelle im Speicher eine Instanz mit dem gleichen Wert wie der neu angeforderten Instanz liegt. Je »länger« der Wert der neuen Instanz ist und je mehr Instanzen es bereits gibt, desto aufwendiger gestaltet sich die Suche nach einer bereits bestehenden passenden Instanz. Ab einem gewissen Punkt ist es dann nicht mehr effizient, eine bereits existierende Instanz erneut zu referenzieren, weil die Suche mehr Rechenzeit kostet als das Erstellen einer neuen Instanz. Python entscheidet unabhängig vom Programmierer, welchen der beiden Wege es beschreitet. Beispielsweise haben wir im letzten Abschnitt die Arbeitsweise von id mit dem String "Hallo Welt" verdeutlicht und festgestellt, dass sich die Identitäten der beiden Instanzen unterscheiden: Python hat in diesem Fall aus den oben genannten Optimierungsgründen zwei Instanzen des Strings erstellt, obwohl dies nicht nötig gewesen wäre.

Bei den mutable, also den veränderlichen Datentypen sieht es anders aus: Weil Python damit rechnen muss, dass sich der Wert einer solchen Instanz nachträglich ändern wird, ist das obige System, nach Möglichkeit bereits vorhandene Instanzen erneut zu referenzieren, nicht sinnvoll. Hier kann man sich also darauf verlassen, dass immer eine neue Instanz erzeugt wird.

Weil wir bisher noch keinen veränderbaren Datentyp eingeführt haben, muss an dieser Stelle auf ein Beispiel verzichtet werden.

Wir werden im Folgenden bei der Einführung neuer Datentypen angeben, zu welcher der beiden Kategorien sie gehören.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






 <<   zurück
  
  Zum Katalog
Zum Katalog: Python






Python
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Linux






 Linux


Zum Katalog: Ubuntu GNU/Linux






 Ubuntu GNU/Linux


Zum Katalog: Praxisbuch Web 2.0






 Praxisbuch Web 2.0


Zum Katalog: UML 2.0






 UML 2.0


Zum Katalog: Praxisbuch Objektorientierung






 Praxisbuch Objektorientierung


Zum Katalog: Einstieg in SQL






 Einstieg in SQL


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für Fachinformatiker


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo