カテゴリ: Python 更新日: 2025/12/22

Pythonのbytes型とbytearray型とは?初心者向けにバイナリデータの扱い方を解説!

Pythonのbytes型とbytearray型とは?バイナリデータの扱い方を初心者向けに解説
Pythonのbytes型とbytearray型とは?バイナリデータの扱い方を初心者向けに解説

先生と生徒の会話形式で理解しよう

生徒

「先生、バイナリってよく聞くんですが、Pythonでどう扱えばいいんですか?」

先生

「Pythonでは、バイナリデータを扱うためにbytes型bytearray型という2つのデータ型がありますよ!」

生徒

「その2つって何が違うんですか?初心者にも分かるように教えてください!」

先生

「もちろん!それでは、Pythonのバイナリデータの基本から丁寧に解説していきましょう!」

1. バイナリデータとは?

1. バイナリデータとは?
1. バイナリデータとは?

まずは「バイナリデータ」って何?というところから。バイナリデータとは、コンピューターが扱う「0と1」でできたデータのことです。文字や画像、音声も、実はすべてバイナリとして保存されています。

例えば画像ファイルを開くとき、Pythonは「文字」ではなく「バイナリ」として読み取ります。

2. bytes型とは?

2. bytes型とは?
2. bytes型とは?

bytes型は、読み取り専用のバイナリデータ型です。一度作ると変更できません(不変型)。

例えるなら「密封された箱」のようなものです。中身を見たりコピーすることはできますが、直接中身をいじることはできません。


b = bytes([65, 66, 67])
print(b)

b'ABC'

[65, 66, 67]は、それぞれA, B, Cを表すASCIIコードです。

3. bytearray型とは?

3. bytearray型とは?
3. bytearray型とは?

bytearray型は、変更可能なバイナリデータ型です。bytes型とは違い、あとから中身を書き換えることができます。

例えるなら「チャック付きの袋」のような感じです。あとから物を出し入れできます。


ba = bytearray([65, 66, 67])
ba[0] = 97
print(ba)

bytearray(b'aBC')

6597に変えたことで、Aaになっています。

4. bytes型とbytearray型の違い

4. bytes型とbytearray型の違い
4. bytes型とbytearray型の違い
  • bytes型: 不変(変更できない)
  • bytearray型: 可変(変更できる)
  • どちらも: バイナリデータを扱うときに使う

文字データをバイナリに変換するにはencode()、バイナリを文字に戻すにはdecode()を使います。

5. encode()とdecode()の使い方

5. encode()とdecode()の使い方
5. encode()とdecode()の使い方

文字列(str型)をバイナリに変えるにはencode()を使います。逆に、バイナリから文字に戻すにはdecode()です。


s = "こんにちは"
b = s.encode("utf-8")
print(b)
print(b.decode("utf-8"))

b'\xe3\x81\x93\xe3\x82\x93\xe3\x81\xab\xe3\x81\xa1\xe3\x81\xaf'
こんにちは

utf-8は文字をバイナリに変換するための方式(文字コード)です。

6. バイナリデータはいつ使うの?

6. バイナリデータはいつ使うの?
6. バイナリデータはいつ使うの?

Pythonでバイナリデータを扱うのは、以下のような場面です:

  • 画像ファイルや音声ファイルを読み書きするとき
  • ネットワーク通信でデータを送受信するとき
  • 暗号化や圧縮処理を行うとき

たとえば、画像ファイルを開くときはこんな風にします:


with open("image.png", "rb") as f:
    data = f.read()
print(type(data))

<class 'bytes'>

7. bytearray型は便利!書き換えたいときに使おう

7. bytearray型は便利!書き換えたいときに使おう
7. bytearray型は便利!書き換えたいときに使おう

bytearray型は、ファイルから読み取ったデータを加工したいときにとても便利です。たとえば、特定のバイトだけ変更したいときなどです。


data = bytearray(b"Python")
data[0] = ord("J")
print(data.decode())

Jython

ord()は文字を数字に変換する関数です。

まとめ

まとめ
まとめ

Pythonでバイナリデータを扱うための基本として、bytes型とbytearray型の役割や違いを理解することはとても大切です。この記事では、バイナリデータがどのような場面で使われるのか、bytes型とbytearray型がどのように動作するのか、それぞれの特徴を丁寧に振り返りながら学んできました。コンピューターが扱う情報の多くは最終的にバイナリとして保存されるため、画像、音声、ネットワーク通信、暗号化、圧縮などの処理では必ずこの知識が役立ちます。特に初心者のうちは文字列とバイナリの違いが分かりづらいことが多いため、encodeやdecodeを使ってデータを適切な形に変換する流れをしっかり理解しておくことが重要になります。

bytes型は不変であり、作成したあとに中身を変更できないため、安全にデータを扱うことができます。一方、bytearray型は可変であり、バイト単位で自由に書き換えられます。どちらもバイナリを扱う上で欠かせない存在ですが、用途によって使い分けることで効率的で柔軟なプログラムを作ることができるようになります。また、bytearray型を使うと、ファイルから読み込んだデータをその場で加工することができるため、画像処理やデータ変換などの実践的な場面でも役立ちます。初心者であっても、実際に触れながら動きを確認すると理解がより深まり、バイナリの世界がぐっと身近になるはずです。

encodeとdecodeは文字とバイナリをつなぐとても重要な仕組みです。日本語などのマルチバイト文字を扱う場合、文字コードの違いでトラブルが起きやすいため、utf-8を使った変換処理の流れを覚えておくことは大きな助けになります。Pythonはバイナリ処理を直感的に書ける言語なので、bytes型やbytearray型を組み合わせることで安全かつ柔軟にデータを扱えるようになります。プログラムに触れれば触れるほど、これらの型を理解しているかどうかで大きな差が出てくることがわかるでしょう。

サンプルプログラムで総復習

最後に、bytes型とbytearray型をまとめて復習できる簡単なサンプルコードを紹介します。データの変換、変更、読み取りなど、これまで学んだ内容がどのようにつながるのかを確認してみましょう。


text = "バイナリデータの復習です"
bdata = text.encode("utf-8")

mutable = bytearray(bdata)
mutable[0] = ord("★")

print("元のバイナリ:", bdata)
print("変更後バイナリ:", mutable)
print("文字列に復元:", mutable.decode("utf-8"))

このサンプルのように、まず文字列をバイナリに変換し、その後bytearray型を使って特定のバイトだけを書き換えるといった処理を行うことで、bytes型とbytearray型の違いや活用方法が自然と理解できます。特にバイナリは目に見えにくいデータであるため、printで確認する習慣をつけると、どのように変化しているかを視覚的に把握できるようになります。

先生と生徒の振り返り会話

生徒

「bytes型とbytearray型の使い分けがよく分かりました!特に、変更できるかどうかの違いが大きいんですね。」

先生

「その通りです。バイナリデータは画像や音声、ネットワーク通信でもよく使われるので、可変か不変かを意識して選ぶことが大切ですよ。」

生徒

「encodeとdecodeの流れも分かってきました。バイナリのままだと読めないけれど、文字に戻すと意味が分かるのが面白いですね!」

先生

「そこに気づけたのは大きな進歩です。文字コードを理解すると、データトラブルを避けやすくなるので必ず役立ちますよ。」

生徒

「これから画像やファイルを扱うプログラムも作ってみたくなりました!」

先生

「とても良い姿勢ですね。今日学んだ型の特徴を意識しながら、ぜひたくさん挑戦していきましょう。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Pythonのbytes型とは何ですか?初心者でもわかるように教えてください

Pythonのbytes型は、読み取り専用のバイナリデータ型です。一度作成すると中身を変更できない不変型で、主に画像や音声などのバイナリデータを扱うときに使用されます。
カテゴリの一覧へ
新着記事
New1
Django
Djangoプロジェクトのディレクトリ構造を完全解説!初心者でも迷わないフォルダの見方
New2
Flask
Flask×Flask-SocketIOでチャットアプリを作る流れを初心者向けにやさしく解説
New3
Flask
Flaskアプリの作り方を基礎から学ぼう!初心者が覚えるべき開発の流れとは?
New4
Flask
Flask-WTFでファイルアップロードフォームを完全ガイド!初心者でもわかる画像やPDFのアップロード方法
人気記事
No.1
Java&Spring記事人気No1
Django
Django環境構築の全手順を完全解説!初心者でも迷わないPython・Djangoセットアップガイド
No.2
Java&Spring記事人気No2
Flask
Flask-Loginでユーザー認証を完全ガイド!初心者でもわかるログイン処理の作り方
No.3
Java&Spring記事人気No3
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.4
Java&Spring記事人気No4
Python
PythonでHello Worldを表示するには?初心者向けに最初の1行を実行してみよう
No.5
Java&Spring記事人気No5
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
No.6
Java&Spring記事人気No6
Python
Pythonでリストを文字列に変換する方法を完全ガイド!初心者でもわかるjoinの使い方
No.7
Java&Spring記事人気No7
Python
Pythonのmatch文(パターンマッチング)とは?switch文の代替としての使い方をやさしく解説
No.8
Java&Spring記事人気No8
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本