2016-05-07 13 views

Antwort

4

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 
+0

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

+0

* 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. –

0

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 
Verwandte Themen