In-Place-veränderbare Typen und unveränderliche Typen
In-Place-veränderbare Typen werden auch als hashbare Typen bezeichnet, und in-place-veränderbare Typen werden auch als nicht-hashbare Typen bezeichnet.
In-Place-unveränderliche Typen:
Numerische Typen: int, float, decimal.Decimal, Fractions.Fraction, complex
String-Typen: str, Bytes
Tupel
frozenset
Boolescher Typ: Wahr, Falsch
Keine
In-Place-Variablentyp:
list
dict
set
So überprüfen Sie tatsächlich, ob es sich um eine In-Place-Variable handelt
Hash gibt weiterhin den Hashwert des direkt veränderbaren Typs zurück. Wenn die Funktion für einen direkt veränderlichen Typ aufgerufen wird, wird ein TypeError zurückgegeben.
Nur hashbare Typen können als Diktatschlüssel verwendet werden.
Nur Typen, die gehasht werden können, können in Sets platziert werden, daher können Sets selbst nicht in Sets verschachtelt und gespeichert werden.
Beispiel:
>>> hash(b'aaa')
6904179387427091653
>>> hash(bytearray(b'aaa'))
Traceback (letzter Aufruf zuletzt):
Datei „
TypeError: unhashable type: 'bytearray'
>>> ({1,2,3}))
-7699079583225461316
>>> hash({1,2,3})
Traceback (letzter Aufruf zuletzt):
Datei "
TypeError: unhashable type: 'set'
So überprüfen Sie tatsächlich, ob es sich bei dem Vorgang um eine direkte Änderung handelt.
Die integrierte Funktion id() gibt die tatsächliche Speicheradresse eines Objekts im Speicher zurück.
>>> L=[1]
>>> id(L)
>>> 🎜>>>> id(L)
49689480 #An Ort und Stelle ändern, damit Sie sehen können, dass sich die Speicheradresse nicht geändert hat.
>>> s='aa'
>>> id(s)
>>> s+='bb'
> >> id(s)
49700008 #Da es nicht direkt geändert werden kann, wird bei einer Änderung der Zeichenfolge eine neue Speicheradresse zur Speicherung geöffnet.
>>>
Ob die Daten in der Reihenfolge gespeichert werden
Beim Vergleich wird die Größe jedes Elements der Reihe nach verglichen. Wenn beim Vergleich festgestellt wird, dass die Typen unterschiedlich sind, wird ein Fehler angezeigt.
Liste
Tupel
str
Bytes
set