Pythonでは、bytesとbytestringは2つの異なるデータ型で、それぞれが連続した文字を表現します。bytesは生の、符号なしの8ビット値を含み、これらはしばしばASCII(標準的な文字エンコーディング)で表示されます。一方、bytestringはテキスト文字を表すUnicodeの不変のシーケンスです。
Python 3のbytesとbytearrayクラスはどちらもバイトの配列を保持しています。ここで、各バイトは0から255までの値を取ることができます。主な違いは、bytesオブジェクトは不変であるため、一度作成するとその要素を変更することはできません。対照的に、bytearrayオブジェクトはその要素を変更することを許可します。
bytesとbytearrayはどちらも文字列をエンコードおよびデコードする関数を提供します。bytesオブジェクトはいくつかの異なる方法で構築することができます。例えば、次のようになります:
>>> bytes(5)
b'\\x00\\x00\\x00\\x00\\x00'
>>> bytes([116, 117, 118])
b'tuv'
>>> b'tuv'
b'tuv'
>>> bytes('tuv')
TypeError: string argument without an encoding
>>> bytes('tuv', 'utf-8')
b'tuv'
>>> 'tuv'.encode('utf-8')
b'tuv'
bytearrayも同様に、いくつかの方法で構築することができます。例えば、次のようになります:
>>> bytearray(5)
bytearray(b'\\x00\\x00\\x00\\x00\\x00')
>>> bytearray([116, 117, 118])
bytearray(b'tuv')
>>> bytearray('tuv')
TypeError: string argument without an encoding
>>> bytearray('tuv', 'utf-8')
bytearray(b'tuv')
bytearrayは可変であるため、その要素を変更することができます。例えば、次のようになります:
>>> a = bytearray('tuv', 'utf-8')
>>> a
bytearray(b'tuv')
>>> a[0]=115
>>> a
bytearray(b'suv')
bytesとbytearrayオブジェクトは+演算子を使用して連結することができます。また、bytesとbytearrayオブジェクトはdecode関数を使用して文字列に変換することができます。
以上がPythonにおけるbytesとbytestringの基本的な違いと使い方になります。これらの理解はPythonプログラミングにおいて重要な要素となります。