我正在嘗試初始化一個(gè)任意的長(zhǎng)列表,但是我這樣做的方式卻默默地失敗了。代碼:a_long_list = [True] * (1000000011)我嘗試嘗試/捕獲異常但沒(méi)有成功。理想情況下,如果初始化成功就好了,但最重要的是檢測(cè)初始化是否失敗。環(huán)境:我使用的是 python 3.8.5,不幸的是 numpy 在這個(gè)環(huán)境中不可用我也嘗試了數(shù)組,但沒(méi)有成功(也默默地失敗了)。a_long_list = array.array('b', (1,)*1000000011)
1 回答

婷婷同學(xué)_
TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
您嘗試使用的方法array.array
是首先創(chuàng)建tuple
與您的內(nèi)存使用量相當(dāng)?shù)膬?nèi)存使用量list
,因此峰值內(nèi)存使用量仍然太高。array
乘以由 Short 組成的Short tuple
,而不是tuple
:
a_long_list = array.array('b', (1,)) * 1000000011
array.array
然后將有效地生成更長(zhǎng)的數(shù)組,完全使用內(nèi)存高效的 C 級(jí)類(lèi)型(每個(gè)元素僅占用一個(gè)字節(jié),而不是指針,通常每個(gè)元素 4-8 個(gè)字節(jié);如果您隨后開(kāi)始分配范圍之外的值,則更多小int
緩存),沒(méi)有您不使用的巨大臨時(shí)緩存。
添加回答
舉報(bào)
0/150
提交
取消