Python entscheiden können, unveränderliche Objekte Speicherung zu teilen (Strings, Zahlen, ...)
Da sie unveränderlich sind, ist sie für den Benutzer transparent. Es spart nur Speicher.
a[0] is b[0]
könnte wahr oder falsch sein. Auf der anderen Seite
a[0] is c[0]
ist immer wahr, weil a is c
. (Und die Änderung von a
Änderungen c
)
Aber da list
Typ wandelbar ist, kann a
sein nicht b
(Python nicht selbst ermöglicht die Lagerung in diesem Fall zu optimieren). Das sind unabhängige Objekte. Die Änderung a
kann nicht geändert werden b
.
Hinweis zu meiner Bemerkung "kann wahr oder falsch sein". Betrachten Sie dies in Python 3,4
>>> b=1234567890
>>> a=[1234567890]
>>> b is a[0]
False
Python nicht die Mühe, die Verbindung zwischen b
und a[0]
zu machen. Auch passiert mit langen Strings (ich nehme an, dass wäre ein Leistungsproblem vs geringe Wahrscheinlichkeit, eine genaue große Anzahl 2 mal hintereinander zu finden? 1
hat bessere Chance, im gesamten Programm wiederholt werden)
Allerdings, wenn Sie dies tun erhalten Sie ein anderes Ergebnis:
>>> b=1234567890
>>> a=[b,1,2]
>>> b is a[0]
True
(ich sicher nicht sagen würde, warum, wie sie variieren je nachdem, ob sie als long int oder nur int, Wert oder Adresse gespeichert ist, etc ..., aber Python hat definitiv mehr Informationen über den Wert, der hier dupliziert wird!)
Fazit ist: verlassen Sie sich nicht darauf für immuta ble Objekte. Verwenden Sie immer ==
.
Warum sollte ' a' und 'b' zeigen auf den gleichen Ort? nur weil sie zufällig Listen mit identischen Werten haben? – UnholySheep
So passiert es in Python. Sie erstellen also a = 5 und suchen nach itl, wenn 5 bereits existiert, und wenn a darauf verweist. lustige Übung für dich: a = [1,2,3,4,5]; g = 4; g ist ein [3]; Wahr. lustig, richtig??!! kann jemand bestätigen, wenn das, was ich gerade gesagt habe, richtig ist? PS - Neu in der Community –
Ganzzahlen sind unveränderlich, Liste ist veränderbar. Die bereitgestellten Antworten erklären das sehr detailliert. "So passiert es in Python" ist natürlich auch falsch, sonst würden Sie das Ergebnis, das Sie sehen, nicht sehen. – UnholySheep