データの(あるいはデータ型の)大事な性質に次のものがあります。 変更可能性(ミュータビリティ) 複製可能性(コピーアビリティ) 破棄可能性(ディスカーダビリティ) 状態を表すデータは変更可能でないと使い物になりませんが、一方で、変更してはいけないデータを変更してしまうバグは非常に多いものです。変更可能データをギリギリまで少なくして、できるだけ多くのデータを変更不可能(イミュータブル)にしたほうがいいだろうと思います。constとかfinalをイッパイ付けようね、ってことです。それを突き詰めると、一部の関数型言語のように、そもそも変更可能データがない仕様となります。 コンピュータでは、データのコピーが比較的容易ですが、それでも巨大なデータとなるとそうそうコピーはできません。現実的には複製不可能なデータもあるのです。変更不可能データなら、データ共有(シェアリング)によりコピーしたのと同じ効果を