2017-01-24 48 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/