a = 2
b = 2
print(b is a)
a = [2]
b = [2]
print(b is a)
Die erste print
gibt True
zurück und die zweite print
gibt False
zurück. Warum das?(Python) Wie unterscheidet sich `2` von` [2] `bei` is`?
a = 2
b = 2
print(b is a)
a = [2]
b = [2]
print(b is a)
Die erste print
gibt True
zurück und die zweite print
gibt False
zurück. Warum das?(Python) Wie unterscheidet sich `2` von` [2] `bei` is`?
In Python sind kleine Intets effizienter.
Also, b is a
ist True
, weil sie den gleichen Speicherort im Speicher haben.
is
prüft auf Objektidentität. Wenn Sie für die Gleichstellung Verwendung ==
Ausnahme None
in diesem Fall prüfen wollen scheint ein allgemeiner Konsens zu sein, zu verwenden is
>>> a = 2
>>> b = 2
>>> id(a)
1835382448
>>> id(b)
1835382448
Warum haben 'b' und' a' nicht die gleiche Position im Speicher, wenn beide '[2]' zugewiesen sind? Zeigen sie nicht auf dasselbe Objekt? entschuldige mein begrenztes Wissen – inspd
* Warum haben b und a nicht den gleichen Ort im Speicher, wenn beide '[2]' 'zugeordnet sind? Dies ist, weil jedes Mal, wenn Sie '[2]' schreiben, Sie ein * neues * Array erstellen. Sie verwenden ein vorhandenes Array nicht erneut. –
is
prüft Objektidentität (ist Liste a
die gleiche Instanz als Liste b
). Und ==
vergleicht Wert Identität (ist, was in der Variablen a
entspricht, was in der Variablen b
gespeichert ist)
Also in Ihrem Fall. [2]
der Wert ist, und während variable a
und variable b
beide speichern die diesen Wert, sie sind nicht das gleiche (Sie a
ändern könnte, und b
ändern würde nicht)
Wenn Sie eine andere Variable und zeigte es a
hinzugefügt, Sie konnten dieses Verhalten sehen:
Python 2.7.10 (default, Oct 23 2015, 19:19:21)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = [2]
>>> b = [2]
>>> a == b
True
>>> a is b
False
>>> c = a
>>> c == a
True
>>> c is a
True
@mgilson danke! – inspd