我有array or list
,
现在我想在数组中进行一些更改,然后返回arr
variable/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 :(得分:2)
分配时如下:
arr = arr[2:] + arr[:2]
您正在创建arr
的新引用,旧的引用将被销毁。意味着分配/删除。
您应该切片分配:
arr[:] = arr[2:] + arr[:2]
arr
保留相同的引用,如果大小没有变化,则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
答案 1 :(得分:0)
<1,2,3,4>
存储在内存中的某个位置。 arr
引用了<1,2,3,4>
,arr[2:]
引用了<3,4>
引用的相同arr
。
对于数字列表,您为这些引用使用了额外的空间,而不是数字本身。
对于高调对象的列表,这实际上变成了一种更有效的处理内存的方法。
我建议通读一下:
http://foobarnbaz.com/2012/07/08/understanding-python-variables/