更新列表是否需要额外的 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/
我有一个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/