## 概要 - [[タプル (Elixir)|タプル]] - 参照のみで基本更新されないもの - 関数から複数の戻り値を返すときなどに - [[リスト (Elixir)|リスト]] - 更新されるもの - インデックスアクセスが必要ないもの ## 備考 - [[リスト (Elixir)|リスト]] - サイズの取得には全走査が必要 - 要素数が多く後方の要素を取得する場合は遅い ([[連結リスト]]のため) - [[リスト (Elixir)|リスト]]の結合をする場合、左側の[[リスト (Elixir)|リスト]]は最後まで走査が必要なため遅い - 一方、先頭に結合する場合は問題ない - 先頭に結合してからreverseした方が速いという話も... - `elem/2`が[[タプル (Elixir)|タプル]]にあって[[リスト (Elixir)|リスト]]にないのはインデックスアクセスを推奨していないため - [[タプル (Elixir)|タプル]] - インデックスを指定しての取得は速い - 要素の追加/更新 (削除も?) は遅い - 各要素がメモリ上に連続しているため、変更が加わると別のメモリアドレスに書き換える必要があるから - ただ、変更が入った要素以外はbefore/afterの[[タプル (Elixir)|タプル]]で参照を共有するってあるから、そうでもないような... 🤔 > Note that this applies only to the tuple itself, not its contents. For instance, when you update a tuple, all entries are shared between the old and the new tuple, except for the entry that has been replaced.