Heim > Backend-Entwicklung > Python-Tutorial > Unveränderliche vs. veränderliche Typen: Wann bedeutet Wertzuweisung eine direkte Änderung?

Unveränderliche vs. veränderliche Typen: Wann bedeutet Wertzuweisung eine direkte Änderung?

DDD
Freigeben: 2024-12-16 16:54:11
Original
447 Leute haben es durchsucht

Immutable vs. Mutable Types: When Does Value Assignment Mean In-Place Modification?

Unveränderliche vs. veränderliche Typen: Klärung der Konzepte

Bei der Arbeit mit Programmiersprachen ist das Verständnis der Unterscheidung zwischen unveränderlichen und veränderlichen Typen von entscheidender Bedeutung. Die in der Abfrage bereitgestellten Beispiele werfen Fragen zu diesem Konzept auf.

Was macht einen unveränderlichen Typ aus?
Unveränderliche Typen sind Objekte, deren Werte nach der Erstellung nicht geändert werden können. Float-Objekte gelten oft als unveränderlich, wie im Beispiel zu sehen ist:

class RoundFloat(float):
    def __new__(cls, val):
        return float.__new__(cls, round(val, 2))
Nach dem Login kopieren

Dieses Beispiel definiert eine Klasse, die den Float-Typ erweitert. Die Methode new ändert jedoch nicht den zugrunde liegenden Float-Wert, der während der Objekterstellung erstellt wurde. Ähnlich verhält es sich mit dem Beispiel:

class SortedKeyDict(dict):
    def __new__(cls, val):
        return dict.__new__(cls, val.clear())
Nach dem Login kopieren

erstellt eine Klasse, die den Typ dict erweitert, wobei new bei der Erstellung alle Schlüssel aus dem Wörterbuch entfernt. Sowohl RoundFloat als auch SortedKeyDict weisen Unveränderlichkeit auf, da ihre neuen Methoden die ursprünglichen Werte nicht ändern.

Veränderliche Typen: In-Place-Änderung
Im Gegensatz dazu veränderbare Typen ermöglichen die direkte Änderung von Werten. Das Beispiel:

class SortedKeyDict_a(dict):
    def example(self):
        return self.keys()
Nach dem Login kopieren

definiert eine Klasse, die den Typ dict um eine Beispielmethode erweitert, die eine Liste von Schlüsseln zurückgibt. Das Diktat bleibt jedoch veränderlich, wie Folgendes zeigt:

d = (('zheng-cai', 67), ('hui-jun', 68),('xin-yi', 2))
SortedKeyDict_a(d)  # Returns a dictionary without calling example
Nach dem Login kopieren

Veränderlichkeit: Wertzuweisung vs. In-Place-Änderung
Das Verhalten unveränderlicher Typen kann verwirrend sein, insbesondere wenn man darüber nachdenkt Wertzuweisungen:

x = 5.0
x += 7.0
print x # 12.0
Nach dem Login kopieren

In diesem Beispiel ist x ein Float-Objekt, das unveränderlich ist. Die Zuweisung x = 7,0 scheint jedoch ihren Wert zu ändern. Der Hauptunterschied besteht hier darin, dass dem ursprünglichen Float-Wert von x ein neuer Wert zugewiesen und nicht an Ort und Stelle geändert wird.

Diese Unterscheidung gilt auch für veränderliche Typen. Betrachten Sie das folgende Beispiel:

s = 'foo'
s += 'bar'
print s # foobar
Nach dem Login kopieren

Da s vom Typ string (unveränderlich) ist, muss es neu zugewiesen werden, um „bar“ einzuschließen. In-Place-Änderungen können mit veränderlichen Typen vorgenommen werden:

x = [1, 2, 3]
x += [3, 2, 1]
print x # [1, 2, 3, 3, 2, 1]
Nach dem Login kopieren

Hier wird die Liste x durch Anhängen einer weiteren Liste erweitert. Diese Beispiele verdeutlichen, dass die Veränderbarkeit von Typen mit den Möglichkeiten zur direkten Änderung zusammenhängt.

Das obige ist der detaillierte Inhalt vonUnveränderliche vs. veränderliche Typen: Wann bedeutet Wertzuweisung eine direkte Änderung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage