2017-01-24 49 views
0

我有一個array or list, 現在我想對數組進行一些更改並將其放回arrvariable/list。我是否使用額外的空間?或者它是相同的變量再次更新?更新列表是否需要額外的空間?

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

你是什麼意思與 「LHS ARR是RHS ARR不同」? –

回答

2

分配時這樣的:

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

你要創建的arr一個新的參考,而舊的被破壞。意味着分配/刪除。

你應該做片分配

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

arr保持相同的參考,如果大小不會改變,無記憶allocaton發生了arr(但右邊和&切片仍需要分配)

演示:

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

結果:False

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

結果:True

0

<1,2,3,4>某處被存儲在內存中。 arr<1,2,3,4>arr[2:]的引用具有與arr所引用的相同的<3,4>

對於數字列表,您將爲這些引用使用額外空間,但不是數字本身。

有關高調對象的列表,這實際上成爲一種更高效的內存處理方式來處理它。

我建議讀通過這個:
http://foobarnbaz.com/2012/07/08/understanding-python-variables/