簡體   English   中英

如何在Python中存儲單字節內存?

[英]How to store single byte of memory in Python?

如何在Python中分配/存儲單個或幾個字節(例如2或4)字節的信息?

我不是在尋找Python中malloc / new的替代品,但可能是一些不占用大量內存的數據類型。

我嘗試了以下但是如下所示,所有都占用了大量的內存。

Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> i = 1 ; sys.getsizeof(i)
24
>>> i = None ; sys.getsizeof(i)
16
>>> i = 'c' ; sys.getsizeof(i)
38
>>> i = 'good' ; sys.getsizeof(i)
41
>>> i = bytearray(0) ; sys.getsizeof(i)
48
>>> i = bytearray(1) ; sys.getsizeof(i)
50
>>> from struct import *
>>> i = pack('h', 1) ; sys.getsizeof(i)
39
>>> i = array('l', [1]) ; sys.getsizeof(i)
64L

我喜歡Python並且正在編寫一個應用程序,它將存儲大約100,000個防火牆規則。 如果我使用Python的常規數據類型(整數,字符串),每條規則將是大約500字節的信息。 我想節省空間並避免切換到C / C ++,因為大多數應用程序的其余部分都在Python(2.7)中。

此外,我無法保留內存,因為我的應用程序幾乎每2分鍾檢查一次規則的更新或修改。

我的想法是通過壓縮信息來節省內存。 例如,不是將規則的“方向”存儲為字符串或整數中的“輸入”或“輸出”或“輸出”,而是將2或3位用於標記特定方向。 有了這個我假設我的一個規則信息可以保存到少於10個字節。 為此,我想知道一種只存儲2/4字節信息的方法。

感謝您的反饋/建議/指針。

在測量您的大小時,您沒有注意從存儲的數據大小中排除基礎類開銷。 例如,下面顯示了bytearray有大約48個字節的開銷,但是每個添加的字節大約需要1個字節。 我假設從50字節到53到56的跳轉表示存儲器訪問優化。

>>> i = bytearray()
>>> sys.getsizeof(i)
48
>>> i = bytearray((1))
>>> sys.getsizeof(i)
50
>>> i = bytearray((1,2))
>>> sys.getsizeof(i)
53
>>> i = bytearray((1,2,3))
>>> sys.getsizeof(i)
53
>>> i = bytearray((1,2,3,4))
>>> sys.getsizeof(i)
53
>>> i = bytearray((1,2,3,4,5))
>>> sys.getsizeof(i)
56

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM