在python中,array.array插入是如何工作的?
在python中,array.array是一种可变结构 但是,我不确定array.array结构中的插入操作是如何工作的 由于array.array使用连续内存,如果新元素不能以连续方式放置,它是否会创建新内存块并复制数组的所有元素?它是否为插入操作保留了额外的未使用空间?列出以防万一 任何在引擎盖下将数据保存在连续内存区中的体面容器,都会分配比保存当前元素数量所需的内存更多的内存在python中,array.array插入是如何工作的?,python,arrays,Python,Arrays,在python中,array.array是一种可变结构 但是,我不确定array.array结构中的插入操作是如何工作的 由于array.array使用连续内存,如果新元素不能以连续方式放置,它是否会创建新内存块并复制数组的所有元素?它是否为插入操作保留了额外的未使用空间?列出以防万一 任何在引擎盖下将数据保存在连续内存区中的体面容器,都会分配比保存当前元素数量所需的内存更多的内存插入(追加是一种特殊情况)元素时,如果没有空间容纳其他元素,会发生什么情况: 分配内存区域(当前大小+1(元素大小)
插入(追加是一种特殊情况)元素时,如果没有空间容纳其他元素,会发生什么情况:
当然,在间隔的另一端,可能会为一个容器分配大量内存(例如,500个MiB),但这是不可行的,因为大量内存将作为保留内存“存放”在那里,以防所属容器可能需要它<毕竟,这只是一个妥协的问题 您可以以检查为例(大小和容量方法) 回到我们的问题:
array.array
确实是一个现代化的容器,它可以分配未使用的空间。发件人:
至于插入算法本身,请检查ins1功能:
- 检查(并更新)大小,如果需要,增加内存
- 插入位置之后的图元将向末端(“右”)移动一个位置
- 新元素将放置在插入位置
/* This over-allocates proportional to the array size, making room
* for additional growth. The over-allocation is mild, but is
* enough to give linear-time amortized behavior over a long
* sequence of appends() in the presence of a poorly-performing
* system realloc().
* The growth pattern is: 0, 4, 8, 16, 25, 34, 46, 56, 67, 79, ...
* Note, the pattern starts out the same as for lists but then
* grows at a smaller rate so that larger arrays only overallocate
* by about 1/16th -- this is done because arrays are presumed to be more
* memory critical.
*/