更新列表是否需要额外的 space?

Does updating the list take extra space?

我有一个array or list, 现在我想对数组进行一些更改并放回 arr variable/list。我在使用额外的 space 吗?还是同一个变量再次更新?

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

像这样分配时:

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

您正在创建 arr 的新引用,而旧引用已被销毁。表示 allocation/deletion.

你应该做切片分配:

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,2,3,4> 存储在内存中的某处。 arr 引用了 <1,2,3,4>arr[2:] 引用了 arr 引用的同一个 <3,4>

对于数字列表,您使用了额外的 space 作为参考,而不是数字本身。

对于高配置对象列表,这实际上成为处理它的内存效率更高的方法。

我建议通读一下:
http://foobarnbaz.com/2012/07/08/understanding-python-variables/