Re: Doppelte Zeilen entfernen
Verfasst: Mittwoch 4. Juni 2014, 10:41
@Hyperion: Ich vermute mal ganz stark das liegt an der Implementierung weil bei einem ``a[x] = x`` der Compiler schon erkennen kann welche Methode hier aufgerufen wird, im Gegensatz zu ``a.add(x)`` wo wahrscheinlich tatsächlich erst einmal, und jedes mal, die `add()`-Methode vom Objekt abgefragt wird. Wenn man sich das mal als Bytecodes anschaut:
Würde ich also als Implementierungsdetail ansehen: Bei anderen Implementierungen könnte die Attributzuweisung langsamer sein wenn sie nicht als Sonderfall behandelt wird, und andererseits könnte ich mir vorstellen, dass eine Implementierung den zweiten Fall auch optimieren könnte.
Code: Alles auswählen
In [1]: def f():
...: a[x] = x
...: b.add(x)
...:
In [2]: import dis
In [3]: dis.dis(f)
2 0 LOAD_GLOBAL 0 (x)
3 LOAD_GLOBAL 1 (a)
6 LOAD_GLOBAL 0 (x)
9 STORE_SUBSCR
3 10 LOAD_GLOBAL 2 (b)
13 LOAD_ATTR 3 (add)
16 LOAD_GLOBAL 0 (x)
19 CALL_FUNCTION 1
22 POP_TOP
23 LOAD_CONST 0 (None)
26 RETURN_VALUE