2017-01-24 9 views
0

Ich habe ein array or list, Jetzt will ich einige Änderungen in der Anordnung und zurück zum arrvariable/list setzen in. Verwende ich zusätzlichen Platz? oder es ist die gleiche Variable wird wieder aktualisiert?Benötigt das Aktualisieren der Liste zusätzlichen Speicherplatz?

arr = [1,2,3,4] 
print arr[2:] + arr[:2] # Is is using extra space 
#or 
arr = arr[2:] + arr[:2] # Is is using extra space 
#or 
arr = [1,2,3,4] 
arr = arr # are not they both same? LHS arr is different from RHS arr 
+0

Was meinen Sie mit "LHS arr unterscheidet sich von RHS arr"? –

Antwort

2

wenn wie diese Zuordnung:

arr = arr[2:] + arr[:2] 

Sie eine neue Referenz von arr erstellen, und die alten zerstört wird. Bedeutet Zuordnung/Löschung.

sollten Sie tun slice Zuordnung:

arr[:] = arr[2:] + arr[:2] 

arr hält die gleiche Referenz, und wenn die Größe nicht ändert, tritt kein Memory allocaton für arr (aber die rechte Seite Summe & Aufschneiden noch muss Zuteilung)

Demo:

arr = [1,2,3,4] 
old_arr = arr 
arr = arr[2:] + arr[:2] 
print(old_arr is arr) 

Ergebnis: False

arr = [1,2,3,4] 
old_arr = arr 
arr[:] = arr[2:] + arr[:2] 
print(old_arr is arr) 

Ergebnis: True

0

<1,2,3,4> irgendwo im Speicher abgelegt. arr hat Verweise auf und arr[2:] hat Verweise auf die gleiche <3,4>, die arr verweist auf.

Für eine Liste von Zahlen verwenden Sie zusätzlichen Platz für diese Referenzen, aber nicht die Zahlen selbst.

Für eine Liste von High-Profile-Objekten wird dies tatsächlich zu einem Speicher effizienteren Mittel, um damit umzugehen.

Ich schlage vor, durch das Lesen:
http://foobarnbaz.com/2012/07/08/understanding-python-variables/

Verwandte Themen