2015-12-29 70 views
2

Python中顯然整數需要24個字節。我可以理解,這是因爲代表無限數額的額外花招和哨聲。然而,它看起來像布爾數據類型也花費百日咳24個字節,即使它可能只代表兩個值。爲什麼?Python布爾字節大小

編輯:我不是要求最好的方式來存儲bools。我已經知道其他答案的NumPy,BitArray等。我的問題是爲什麼,而不是如何。只是爲了清楚和關注我已經刪除了問題的第二部分。

+2

1.因爲布爾值是整數子類。 2.不,如果你關心Python對你來說可能不夠低(或者你需要使用類似'numpy'的東西)。 – jonrsharpe

+1

使用ctypes我猜...但真的如果你擔心這個python可能不是這個特定項目的語言的正確選擇... –

+0

「我可以理解,這是因爲額外的鐘聲和口哨代表無界限號碼「 - 不。它就像類型指針和引用計數一樣。在Python 2中,'long',實際的bignum類型,甚至有*更大*的實例。 – user2357112

回答

2

A bool對於它代表的內容可能相當大,但只有其中的兩個。一個完整的列表True s只包含4或8個字節的引用到一個規範的True對象。

如果8個字節仍然過大,並且您確實想要使用Python,您可以考慮使用類似於內置的array模塊或NumPy提供的數組類型。這些提供每字節1個字節的表示。如果這仍然太多,你可以使用一個bitset,或者用Python的內置bignums手動或者像PyPI的BitVector這樣的東西。 這些選項可能會減慢程序的運行速度。它們中的一些可以提供速度改進,但前提是您利用了可以將解釋代碼推送到C中的功能。

+0

我知道使用NumPy,BitVector等的替代方法。我試圖找出Python設計器用來讓布爾佔用24個字節的內部推理。 Python中的大部分內容都經過了深思熟慮,但是這... – ShitalShah

+2

@ShitalShah:如果你的程序太緊張了,你需要擔心'True'和'False'消耗的48個字節,可能不適用於帶有操作系統的機器,更不用說Python解釋器了。 – user2357112

+0

@ShitalShah再次,如果你擔心這種事情,*停止使用Python!*如果你想做這種微型優化,有很多低級語言;這不是Python的設計目標。 – jonrsharpe