2012-04-18 7 views

Antwort

9
>>> a = [[]] 
>>> b = [] 
>>> b in a 
True 
>>> b is a[0] 
False 

Dies beweist, dass es sich um eine Wertprüfung handelt (standardmäßig mindestens), keine Identitätsprüfung. Beachten Sie jedoch, dass eine Klasse, falls gewünscht, __contains__() überschreiben kann, um eine Identitätsprüfung durchzuführen. Aber wieder, standardmäßig, nein.

+0

Das ist perfekt danke! –

1

Es hängt von der Klasse ab, wie es die Prüfung durchführt. Für das eingebaute list verwendet es den Operator ==; andernfalls könnten Sie z.B. Verwenden Sie 'something' in somelist sicher.

Um genauer zu sein, überprüfen Sie, ob das Element gleich einem Element in der Liste ist - so intern ist es wahrscheinlich ein hash(a) == hash(b) Vergleich; Wenn die Hashwerte gleich sind, werden wahrscheinlich auch die Objekte selbst verglichen.

+1

Es wird nicht nur eine Überprüfung von Hashes sein - Hashes können gleich sein, ohne dass die Werte gleich sind. –

+0

Danke Jungs, das ist eine sehr hilfreiche Information! –

+0

Das ist falsch. Ich habe gerade eine '__eq__' Methode definiert, die (unfreiwillig) von' __contains__' oder 'in' aufgenommen wurde. Daher implementiert "list" höchstwahrscheinlich einen "a .__ eq __ (b)" - Vergleich. – Atcold

Verwandte Themen