Pythonの不変(イミュータブル)とは何か?変更可能な型と変更不可能な型の違いを解説
Pythonでは、すべてのオブジェクトは大きく次の2種類に分類されます。
- ミュータブル(変更可能)オブジェクト
- イミュータブル(変更不可能)オブジェクト
この違いを理解することは、Pythonで安全かつ効率的なコードを書く上で非常に重要です。それぞれの特徴を具体例とともに見ていきましょう。
ミュータブル(変更可能)オブジェクトとは
ミュータブルとは「変更可能」という意味です。生成した後でも中身を書き換えられるオブジェクトを指し、代表的なものには list、set、dict などがあります。これらのオブジェクトは、要素の追加・削除・更新を自由に行えるため、柔軟に扱えるのが特徴です。
例1:リストの要素を変更する
list = ["Tutorials ", "Point", "Pvt", "Ltd"] list[2] = 'Tutorix' list
出力
['Tutorials ', 'Point', 'Tutorix', 'Ltd']
インデックス2の要素が「Pvt」から「Tutorix」に書き換わっていることが分かります。
例2:別の要素を変更する
list = ['Car', 'Bike', 'Scooty', 'Bus', 'Metro'] list[4] = 'Bicycle' list
出力
['Car', 'Bike', 'Scooty', 'Bus', 'Bicycle']
このように、リストは作成後も自由に内容を変更できるミュータブルなオブジェクトです。
イミュータブル(変更不可能)オブジェクトとは
イミュータブルとは「不変」、つまり一度作成したら内容を変更できないという意味です。代表的なものには int、float、bool、str、tuple、Unicode文字列などがあります。イミュータブルなオブジェクトを「変更」する場合は新しいオブジェクトを作り直す必要があるため、頻繁な変更にはコストがかかります。
特にタプルは丸括弧 () で囲んで定義され、一度作成すると要素を一切変更できません。
例1:タプルの定義
tuple = ('1', '2', 'Python', 'Perl')
tuple
出力
('1', '2', 'Python', 'Perl')
例2:タプルの要素を変更しようとするとエラーになる
tuple = ('1', '2', 'Python', 'Perl')
tuple[4] = '2019'
tuple
出力
TypeError Traceback (most recent call last)
in
1 tuple=('1','2','Python','Perl')
----> 2 tuple[4]='2019'
3 tuple
TypeError: 'tuple' object does not support item assignment
タプルに要素を代入しようとすると、TypeError: 'tuple' object does not support item assignment というエラーが発生します。これはタプルがイミュータブルであり、要素の変更をサポートしていないことを示しています。
まとめ:ミュータブルとイミュータブルの違い
| 種類 | 主な型 | 変更可否 |
|---|---|---|
| ミュータブル(変更可能) | list、set、dict など | 可能 |
| イミュータブル(変更不可能) | int、float、bool、str、tuple など | 不可能 |
オブジェクトがミュータブルかイミュータブルかを意識して使い分けることで、意図しないバグを防ぎ、より堅牢なPythonコードを書くことができます。
-
Pythonの辞書(ディクショナリ)ビューオブジェクトとは?items()・keys()・values()の使い方を解説
Pythonの辞書(dict)には、items()、keys()、values() という3つの便利なメソッドが用意されています。これらのメソッドは、いずれも「ビューオブジェクト(view object)」と呼ばれる特殊なオブジェクトを返します。ビューオブジェクトは辞書の中身を動的に参照できるため、forループでの反復処理や要素の確認などに広く活用されています。items() メソッド:キーと値のペアを取得するitems() メソッドは、辞書内のすべてのキーと値のペアを格納した dict_items オブジェクトを返します。各要素はタプル形式(キー, 値)で表されます。>>>
-
Python 2.7.xとPython 3.xの主な違いとは?押さえておきたい5つのポイント
Python 2系と3系の違いの背景 Python 3.0は2008年12月にリリースされました。これは、それ以前のバージョンに存在した設計上の課題を是正するために開発されたものです。Python 3の基本理念は「古い書き方を取り除き、機能の重複を減らす」というものでした。 ただし、Python 3.0には後方互換性がありません。つまり、Python 2.xの構文で書かれたプログラムは、そのままではPython 3.xのインタプリタ上で実行できません。なお、バージョン2.7はPython 2.xシリーズにおける最後のメジャーリリースとなっています。 両バージョンの間には数多くの違いがありますが