プログラミングにおいて、イミュータブルとミュータブルは重要な概念です。イミュータブルとミュータブルは、変数やオブジェクトの値の変更に関係しています。本記事では、イミュータブルとミュータブルの違いを説明し、PythonやC#のコードを多く交えて具体例を紹介します。
イミュータブルとミュータブルの概要
イミュータブルとは、変更不可能なことを指し、プログラミングにおいては、一度作成されたオブジェクトの状態を変更できないことを意味します。一方、ミュータブルとは、変更可能なことを指し、プログラミングにおいては、作成したオブジェクトの状態を変更できることを意味します。この違いは、プログラムの動作やパフォーマンスに大きな影響を与えるため、注意が必要です。以下にそれぞれの特徴を列挙します。
イミュータブル (Immutable)
- Immutable: 変更不可能なことを意味する英単語。
- プログラミングにおいては、一度作成されたオブジェクトの状態を変更できないことを指す。
- イミュータブルなオブジェクトは、変更されないため、副作用のないコードを書くことができる。
- 具体例として、文字列や数値が挙げられる。
ミュータブル (Mutable)
- Mutable: 変更可能なことを意味する英単語。
- プログラミングにおいては、作成したオブジェクトの状態を変更できることを指す。
- ミュータブルなオブジェクトは、変更されるため、注意が必要であり、特に複数のスレッドから同時にアクセスされる場合には、競合状態を回避するために注意が必要である。
- 具体例として、リストや辞書が挙げられる。
イミュータブルなオブジェクトの実例
イミュータブルなオブジェクトは、一度生成された後に変更することができません。代わりに、変更する必要がある場合は、新しいオブジェクトを生成してそれを使います。例えば、Pythonの文字列はイミュータブルなオブジェクトです。つまり、一度文字列が生成されると、その文字列を変更することはできません。以下は、Pythonで文字列を生成し、その文字列を変更しようとする例です。
my_string = "Hello, world!" my_string[0] = "h"
上記のコードを実行すると、以下のようなエラーが発生します。
TypeError: 'str' object does not support item assignment
これは、文字列がイミュータブルなオブジェクトであるため、変更することができないためです。
ミュータブルなオブジェクトの実例
ミュータブルとは、変更可能なという意味です。ミュータブルなオブジェクトは、その値を変更できます。例えば、Pythonのリストはミュータブルなオブジェクトです。つまり、リストの要素を変更することができます。以下は、Pythonでリストを生成し、そのリストの要素を変更する例です。
my_list = [1, 2, 3, 4, 5] my_list[0] = 0 print(my_list)
上記のコードを実行すると、以下のような結果が表示されます。
[0, 2, 3, 4, 5]
これは、リストがミュータブルなオブジェクトであるため、要素を変更することができるためです。
プログラミング入門講座ーー基本と思考法と重要事項がきちんと学べる授業 [ 米田 昌悟 ]
プログラミング言語におけるイミュータブルとミュータブル
Pythonには、イミュータブルなオブジェクトとしては、文字列、数値、タプルなどがあります。一方、ミュータブルなオブジェクトとしては、リスト、セット、辞書などが挙げられます。また、C#においても、イミュータブルなオブジェクトとしては、文字列、数値、タプルなどがあります。一方、ミュータブルなオブジェクトとしては、リスト、セット、辞書などがあります。以下は、C#でリストを生成し、そのリストの要素を変更する例です。
List myList = new List { 1, 2, 3, 4, 5 }; myList[0] = 0; Console.WriteLine(string.Join(",", myList));
上記のコードを実行すると、以下のような結果が表示されます。
0,2,3,4,5
これは、リストがミュータブルなオブジェクトであるため、要素を変更することができるためです。一方、以下は、C#で文字列を生成し、その文字列を変更しようとする例です。
string myString = "Hello, world!"; myString[0] = 'h'; Console.WriteLine(myString);
上記のコードを実行すると、以下のようなエラーが発生します。
System.IndexOutOfRangeException: Index was outside the bounds of the array.
これは、文字列がイミュータブルなオブジェクトであるため、変更することができないためです。
まとめ
イミュータブルとミュータブルの違いは、プログラミングにおいて非常に重要です。イミュータブルなオブジェクトは、変更できないため、副作用のないコードを書くことができます。一方、ミュータブルなオブジェクトは、変更できるため、注意が必要です。特に、多くのスレッドで同時にアクセスされる場合には、競合状態を回避するために注意が必要です。最後にPythonやC#などのプログラミングの学習に利用できるUdemy のサイトを紹介します。ぜひ活用ください。
[PR]