python3 bytes 累加使用時的問題


1.先看一下官方定義:

The core built-in types for manipulating binary data are bytes and bytearray. They are supported by memoryview which uses the buffer protocol to access the memory of other binary objects without needing to make a copy.

用於操作二進制數據的核心內置類型是字節和字節數組。memoryview支持它們,它使用緩沖區協議訪問其他二進制對象的內存,而不需要進行復制。

bytearray objects are a mutable counterpart to bytes objects.

bytearray對象是與bytes對象相對應的可變對象。

2.在tcp通信過程中,接收到數據類型基本上是bytes類型,有時我們可能會對數據多次接收,一次處理,這樣就會涉及bytes累加問題。

之前我犯了個錯誤,直接使用 += 操作,導致程序會出現內存泄漏問題。直接舉個栗子:

b1 = bytes()
id1 = id(b1)
b1 += b'tesd0913\x03'
id2 = id(b1)
輸出結果為:id1 = 1801125167536
                      id2 = 1801176182000
說明程序已經重新生成了一個新的bytes對象,這是因為bytes為不可變對象。
 
3. 正確的做法如下:
b1 = bytearray()
id1 = id(b1)
b1.extend(b'tesd0913\x03')
b1.extend(b'ddfffh0sdf\d5')
id2 = id(b1)
# 再次轉換為bytes
b3 = bytes(b1)
 
此時id1和id2的值都為2810967841328,說明沒有新建一個bytearray對象
 
使用bytearray,可以避免多次創建bytes的情況,避免高頻率使用情況的程序內存變大


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM