86263
フラットシーケンスとコンテナシーケンスでは何が違いますか．  
Pythonにおけるそれぞれの具体例を出して頂ければ幸いです．
CC BY-SA 4.0
2022-02-11T01:41:30.470
86261
2022-02-11T04:41:44.110
2022-02-11T04:41:44.110
19110
51374
question
python python3
フラットシーケンスとコンテナシーケンスの違い
フラットシーケンスは基本的に数値、キャラクタ(1文字分の文字コード)、バイトの要素しか格納できないシーケンスです。  
コンテナシーケンスは何でも要素として格納できるシーケンスです。  
というのがざっくりした『違い』の説明です。

フラットシーケンスの具体例は以下です。

  * [bytes, bytearray, memoryview(バイナリシーケンス型)](https://docs.python.org/ja/3/library/stdtypes.html#binary-sequence-types-bytes-bytearray-memoryview)  
配列の中にバイトか数値の要素のみ格納できます。  
他のコンテナやインスタンスを要素として格納することはできません。  
**OK:** `bytes(b"abc")`  
**NG:** `bytes(["a", "b", "c"])` # リストやstrそのものは格納できない

  * [str(テキストシーケンス型)](https://docs.python.org/ja/3/library/stdtypes.html#text-sequence-type-str)  
strとは1文字ずつキャラクタを並べた配列です。  
**OK:** `str("シーケンスのインデックスをスライスして取り出せる")[13:17]`

つまりフラットシーケンスとは、すべての要素を同一のバイト表現とするフラットなシーケンスと言い換えることができます。  
参考:
[`memoryview.tobytes`の説明](https://docs.python.org/ja/3/library/stdtypes.html#memoryview.tobytes)

コンテナシーケンスの具体例は以下です。

  * [list, tuple, range](https://docs.python.org/ja/3/library/stdtypes.html#sequence-types-list-tuple-range)

一般的なシーケンス型とコンテナシーケンスは同義と言っていいでしょう。  
コンテナの要素は他のコンテナやインスタンスを許容します。  
**OK:** `[ ["listの中にlistの中にstrが入る"] ]`

参考資料:
[pythonシーケンスタイプの詳細な説明](https://sourceexample.com/article/jp/168c5d55e7eea71219cf31c944ae212f/)
CC BY-SA 4.0
2022-02-11T03:32:29.810
86263
2022-02-11T03:32:29.810
9820
86261
answer