Python PEP 3137は、可変8ビット配列型としてbytearray
を導入しました。しかし、変更可能なbytes
タイプのlist
は同じ目標を達成し、実際はbetterperformanceですが、おそらくは控えめな構文です。この新しいタイプは、これと矛盾します。Zen of Python`bytearray`はPythonのZenと矛盾していませんか?
これを実行するには、1つの方法が必要です。
だから私の質問は:bytearray
bytes
のlist
上を使用するための任意の文書化の主な利点や設計上の考慮事項はありますか?
これまでのところ、私はPEPやドキュメンテーションのページに記載された動機を見つけられませんでした。実際には、ドキュメントがほぼ等しくなるようにそれらを扱います:
のByteArray型は、可変シーケンスの通常の方法のほとんどを持っている範囲内の整数のミュータブルなシーケンス0 < = X < 256です...
そして、
リストとのByteArrayオブジェクトは、オブジェクトの変更を可能にする追加の操作をサポートしています。他の変更可能なシーケンス型(言語に追加された場合)も、これらの操作をサポートする必要があります。
bytearray
としてsは静的に型付けされている(8ビット符号なし整数として)1は、性能向上を期待するが、逆上述したように、おそらく本当であるかもしれません。また、list
がbytes
を超えるメモリの利点はありません。私はitertools.chain
スタイルの可変型にする必要があると想像することができましたが、これはどこにも言及されておらず、設計目標のようではありません。
リストではできないことをbytearrayで行うことができます –
パフォーマンスに関して懸念がある場合は、おそらくNumPyを使用しているはずです。 – kindall
また、私は、この疑わしい発見: "また、バイトリストの上にbytearrayのメモリの利点はありません。 'list'は、プラットフォームに応じて4バイトまたは8バイトの参照を他の場所に格納された各' bytes'値に格納します。 'bytearray'は値ごとに正確に1バイトを使用します。これはメモリを大幅に節約するはずです。 – kindall