查看 push! 的代码,表明数组增长了一个元素的大小。数组是否在逻辑上增加一个元素的大小,而底层存储保持不变,只要它大于或等于所需的存储元素,并通过创建一个更大的存储并在存储时将整个数组复制到其中来增长full 不能容纳额外的元素?或者,是否必须在每次推送时重新创建数组!手术。
function push!(a::Array{T,1}, item) where T
# convert first so we don't grow the array if the assignment won't work
itemT = convert(T, item)
_growend!(a, 1)
a[end] = itemT
return a
end
Run Code Online (Sandbox Code Playgroud)
Julia 数组以摊销成本的方式增长(目前增长因子为 2),例如参见https://en.wikipedia.org/wiki/Dynamic_array#Geometric_expansion_and_amortized_cost。