Python PEP 3137介紹bytearray
作爲一個可變的8位數組類型。然而,不可變的bytes
類型的list
實現相同的目標,並且實際上具有betterperformance,雖然也許是更笨拙的語法。這種新類型與Zen of Python`bytearray`是否與Python的Zen不矛盾?
應該有一個 - 最好只有一個 - 明顯的方法來做到這一點。
所以我的問題是:是否有任何記錄主要優勢和設計考慮使用bytes
一個bytearray
在list
?
到目前爲止,我還沒有發現在PEP或文檔頁面中記錄的一個動機。事實上,該文檔將它們視爲接近等於:
的ByteArray類型是整數的範圍爲0 < = X < 256.一個可變的序列,具有大部分可變序列的常規方法...
然後,
列表和ByteArray對象支持額外的操作,使對象的就地修改。其他可變序列類型(添加到語言中時)也應該支持這些操作。
由於bytearray
s的靜態類型(如8位無符號整數),人們可能預期的性能提升,但逆上面提到的可能是真實的。此外,bytearray
與bytes
的list
應該沒有記憶優勢。我可以想象,需要一個itertools.chain
風格的可變類型,但這在任何地方都沒有提及,似乎並不是設計目標。
一個bytearray可以做一個列表不能做的事 –
如果你關心性能,你應該使用NumPy。 – kindall
另外,我覺得這個可疑:「另外,字節列表上的字節陣列應該沒有內存優勢。」一個'list'將包含一個引用(4或8個字節,取決於平臺)到每個'bytes'值,該值存儲在別處。一個'bytearray'將會每個值恰好使用1個字節。這應該是一個重大的內存節省。 – kindall