Pythonの組み込み型には数値型、シーケンス型、集合型や辞書型等あり、それぞれにミュータブル/イミュータブル、イテラブルなどの特徴があります。最初はどれがどれに対応しているか分かり難いので、表にしてひと目で分かるようにしてみました。
データ型の特徴がひと目でわかるチートシート
※スマホでの表示は見辛いかもしれませんm()m
データ型 | ミュータブル (可変) | イミュータブル (不可変) | イテラブル | ||
---|---|---|---|---|---|
数値型 | int | 整数型 | ○ | ||
float | 浮動小数点型 | ○ | |||
complex | 複素数型 | ○ | |||
シーケンス型 | list | リスト:[ ] | ○ | ○ | |
tuple | タプル:( ) | ○ | ○ | ||
range | rangeオブジェクト | ○ | ○ | ||
str | 文字列 | ○ | ○ | ||
集合型 | set | 集合:{ } | ○ | ○ | |
frozenset | frozensetオブジェクト | ○ | ○ | ||
マッピング型 | dict | 辞書:{key:value} | ○ | ○ |
<参考>
以下のデータ型の詳細については下記の記事で紹介しています。
集合型
マッピング型(辞書型)
ミュータブル
値を追加したり削除したり変更したりすることが可能なオブジェクトです。
#リストはミュータブルなので、値を変更することが出来ます。
>>> a = ['a', 'b', 'c', 'd']
>>> a[1] = 'x'
>>> a
['a', 'x', 'c', 'd']
尚、ミュータブルなオブジェクトはハッシュ不可能なので、辞書のkeyには使えません。
イミュータブル
変更不可能なオブジェクトです。数値を代入しようとするとTypeErrorとなります。
変更するには、新しいオブジェクトを作成する必要があります。
#文字列はイミュータブルなオブジェクトなので、変更しようとするとエラーが発生。
>>> s = 'abcd'
>>> s[1] = 'x'
Traceback (most recent call last):
File "", line 1, in
TypeError: 'str' object does not support item assignment
#変更する際は、新しいオブジェクトを作ります。
>>> new_s = s[:1] + 'x' + s[2:]
>>> new_s
'axcd'
イミュータブルなオブジェクトはハッシュ可能なので、辞書のkeyになりえます。
イテラブル
要素を1回に1つずつ返す機能をもったオブジェクトで、以下が該当します。
- 全てのシーケンス型(リスト、タプル、文字列)
- 非シーケンス型(辞書、ファイルオブジェクト)
- __iter__()を持つオブジェクト
- __getitem__()を持つオブジェクト
難しい表現ですが、イメージ的にはfor文でループを回せるオブジェクトのことだと思います。
詳細はこちらの記事にてまとめています。ご参照ください。
まとめ
Pythonで使われるデータ型の特徴についてチートシート形式でまとめました。少しでも整理できていれば幸いです。
コメント
[…] リストや辞書等のミュータブル(可変)な型 → keyとして使用不可 […]
[…] random.choice() は、シーケンス型データ(リスト、タプル、文字列、range) からランダムに要素を1つ抽出します。使い方は下記のとおりです。 […]
[…] random.shuffle() は、リストの要素をランダムにシャッフルする関数です。下記の通り、シャッフルしたいミュータブルなシーケンス型 (リスト)を引数xに設定します。 […]