was passiert b = a [:] in Python?

8
%Vor%

was passiert b = a [:] (Warum funktioniert das nicht für Zahlen von -5 bis 256)?

    
Chia's JaJa 24.11.2012, 07:24
quelle

4 Antworten

11

Der Bereich von -5 bis 256 hat mit folgende zu tun:

  

Die aktuelle Implementierung behält ein Array von Integer-Objekten für alle Ganzzahlen zwischen -5 und 256 bei, wenn Sie eine int in diesem Bereich erstellen, erhalten Sie tatsächlich nur einen Verweis auf das vorhandene Objekt.

Um dies zu demonstrieren, beachten Sie, dass id(123) immer den gleichen Wert zurückgibt, während id(9999) verschiedene Werte zurückgeben kann:

%Vor%

Dies ist natürlich ein Artefakt der aktuellen Implementierung. Eine andere Python-Implementierung könnte dies möglicherweise nicht tun oder einen anderen Bereich verwenden.

Was Ihr letztes Beispiel betrifft:

%Vor%

Wie Sie sehen können, kopiert [:] einfach die Referenzen. Dies erklärt, warum a[i] is b[i] auf True für alle i auswertet.

    
NPE 24.11.2012 07:27
quelle
1
%Vor%

Erstellt eine flache Kopie der Elemente in Liste a und benennt diese Kopie b. Alle Elemente, die in der neuen Liste enthalten sind, haben dieselben Objekt-IDs (Denkzeiger) wie die Elemente in der ursprünglichen Liste. Dies ist das erwartete Verhalten.

    
jimhark 24.11.2012 07:30
quelle
1

Hinzufügen zu @NPEs Antwort , hier ist eine schöne Illustration:

%Vor%

druckt:

%Vor%     
Shep 24.11.2012 07:51
quelle
0
%Vor%

b=a macht b zu einem Alias ​​von a. Das bedeutet, dass alle Änderungen von b in a angezeigt werden.

b = a [:] bedeutet, eine Kopie von a zu erstellen und sie b zuzuweisen.

    
alinsoar 24.11.2012 07:29
quelle

Tags und Links