Scala の Vector の アルゴリズム

http://scalajp.github.com/scala-collections-doc-ja/collections_15.html

ベクトルは分岐度の高い木構造で表される2。全てのノードは 32以下の要素か、32以下の他のノードを格納する。32個以下の要素を持つベクトルは単一のノードで表すことができる。ベクトルは、たった一つの間接呼び出しで、32 * 32 = 1024個までの要素を扱うことができる。木構造の根ノードから末端ノードまで 2ホップで 215個、3ホップで 220個、4ホップで 230個以下までの要素をベクトルは扱うことができる。よって、普通のサイズのベクトルの要素選択は 5回以内の配列選択で行うことができる。要素選択が「事実上定数時間」と言ったのは、こういうことだ。

読み込みと同様に、ベクトルの関数型更新も「事実上定数時間」で実行される。ベクトルの真ん中にある要素を更新するには、その要素を格納するノードと、木構造の根ノードからを初めとする全ての親ノードをコピーすることによって行われる。これは関数型更新は、32以内の要素か部分木を格納する 1 〜 5個の ノードを作成することを意味する。これは、可変配列の in-place での上書きに比べると、ずっと時間のかかる計算であるが、ベクトル全体をコピーするよりはずっと安いものだ。

とありますが、本当に再利用されているのを、コードを書いて確かめてみた。
リフレクションつかって、内部のprivateなfiledを取り出すこんな関数を用意

以下実行結果

もとの、1から1000までのVectorから、take(100)して生成した新しいVectorの2つが、実は内部的には1から32のArrayの部分を共有しているのがわかります。