在Python 3也能夠解釋經由memoryview.cast()
底層存儲器以字節或整數或多頭的數組:解釋爲bytearray作爲多頭陣列在Python 2.7
[] b=bytearray(2*8)
[] b
bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
[] m=memoryview(b).cast('L') #reinterpret as an array of unsigned longs
[] m[1]=2**64-1
[] b
bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff')
如可以看到的那樣,我們就可以訪問bytearray
b
就好像它在一個無符號長整型數組(在我的機器上長8個字節)在memoryview
m
的幫助下。
但是,在Python 2.7中的memoryview
lacks方法cast
。
因此,我的問題是否有可能在Python 2.7中重新解釋一個bytearray
作爲一個long數組?
重要的是不要複製/分配更多的內存。
需要的時間在我的機器上讀通過T[i]
長值(Python的3.4):
python list: 40ns (fastest but needs 24 bytes per element)
python array: 120ns (has to create python int-object)
memoryview of bytearray 120ns (the same as array.array)
Jean-François's solution: 6630ns (ca. 50 times slower)
Ross's solution: 120ns
對不起,我不是我的問題明確不夠,整點是要做到這一點,無需額外的內存。 – ead
不是問題,我暫時放棄了用'pack'玩。我想我以後可以想出一個自定義解決方案。 –
增加了一種方法。不是超級光滑的,但與Python 2 –