Python memoryview() 関数
memoryview()Pythonにおいて、メモリビューを作成するために使用される組み込み関数です。
memoryview は「メモリビュー」オブジェクトを返します。これにより、Pythonコードはデータをコピーせずにオブジェクト内部のデータバッファにアクセスできます。これは、大規模なバイナリデータを処理する際にパフォーマンスを向上させることができます。
単語の意味: memoryview「メモリビュー」という意味で、データバッファにアクセスするオブジェクトです。
基本構文とパラメータ
構文形式
memoryview(obj)
パラメータの説明
- パラメータ obj:
- 型: バッファプロトコルを実装したオブジェクト(bytes、bytearray など)
- 説明: メモリビューを作成するオブジェクト。
関数の説明
- 戻り値: memoryview オブジェクトを返します。
- 特徴: オブジェクト内部のデータにコピーせずに直接アクセスできます。
例
例1:memoryview の作成
例
# bytearray から作成
data = bytearray(b"Hello")
m = memoryview(data)
print(m) # 出力: <memory at 0x...>
# bytes から作成
data = b"World"
m = memoryview(data)
print(m[0]) # 出力: 87 (W の ASCII コード)
# 複数バイトへのアクセス
print(m[0:3]) # 出力: <memory at 0x...>
data = bytearray(b"Hello")
m = memoryview(data)
print(m) # 出力: <memory at 0x...>
# bytes から作成
data = b"World"
m = memoryview(data)
print(m[0]) # 出力: 87 (W の ASCII コード)
# 複数バイトへのアクセス
print(m[0:3]) # 出力: <memory at 0x...>
実行結果の予想:
<memory at 0x104174c40> 87 <memory at 0x104174c40>
コードの解説:
- memoryview は bytes または bytearray から作成できます。
- インデックス操作とスライス操作をサポートします。
例2:データの変更(可変オブジェクトのみ)
例
# memoryview は基になるデータを直接変更できます
data = bytearray(b"Hello")
m = memoryview(data)
# 基になるデータを変更
m[0] = 74 # 'J'
print(data) # 出力: bytearray(b'Jello')
# スライスによる変更
m[1:5] = b"abcd"
print(data) # 出力: bytearray(b'Jabcd')
# C型フォーマット
data = b"\x01\x02\x03\x04"
m = memoryview(data)
print(m.tobytes()) # 出力: b'\x01\x02\x03\x04'
data = bytearray(b"Hello")
m = memoryview(data)
# 基になるデータを変更
m[0] = 74 # 'J'
print(data) # 出力: bytearray(b'Jello')
# スライスによる変更
m[1:5] = b"abcd"
print(data) # 出力: bytearray(b'Jabcd')
# C型フォーマット
data = b"\x01\x02\x03\x04"
m = memoryview(data)
print(m.tobytes()) # 出力: b'\x01\x02\x03\x04'
実行結果の予想:
bytearray(b'Jello') bytearray(b'Jabcd') b'\x01\x02\x03\x04'
memoryview は基になるデータを直接変更できるため、大規模なバイナリデータの処理に非常に効率的です。
その他の拡張
Python3 組み込み関数