第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python列表異常內存使用情況

Python列表異常內存使用情況

明月笑刀無情 2021-03-21 21:19:39
我正在一個項目中,該項目涉及從保存在內存中的大列表訪問數據。因為該列表非常龐大(數百萬行),所以我一直在關注正在使用的內存量。我使用OS X,因此在創(chuàng)建這些列表時我將“活動監(jiān)視器”保持打開狀態(tài)。我注意到,列表使用的內存量可能會因其構造方式而有很大差異,但我似乎無法弄清楚原因?,F(xiàn)在來看一些示例代碼:(我在OSX 10.8.3上使用Python 2.7.4)下面的第一個函數創(chuàng)建一個列表,并用所有相同的三個隨機數填充它。下面的第二個函數創(chuàng)建一個列表,并用所有不同的隨機數填充它。import randomimport sysdef make_table1(size):    list1 = size *[(float(),float(),float())] # initialize the list    line = (random.random(),             random.random(),             random.random())    for count in xrange(0, size): # Now fill it        list1[count] = line    return list1def make_table2(size):    list1 = size *[(float(),float(),float())] # initialize the list    for count in xrange(0, size): # Now fill it        list1[count] = (random.random(),                         random.random(),                         random.random())    return list1(首先讓我說,我意識到上面的代碼可以更有效地編寫。這種編寫方式是為了使兩個示例盡可能相似。)現(xiàn)在,我使用這些功能創(chuàng)建一些列表:In [2]: thing1 = make_table1(6000000)In [3]: sys.getsizeof(thing1)Out[3]: 48000072在這一點上,我使用的內存大約增加了46 MB,這是我從上面給出的信息中所期望的?,F(xiàn)在為下一個功能:In [4]: thing2 = make_table2(6000000)In [5]: sys.getsizeof(thing2)Out[5]: 48000072如您所見,兩個列表占用的內存是相同的。它們的長度完全相同,這是可以預期的。我沒想到的是,活動監(jiān)視器提供的內存已躍升到1 GB以上!我知道會有一些開銷,但會是20倍嗎?1 GB的46MB列表?嚴重地?
查看完整描述

1 回答

?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

這兩個函數都列出了6000000個引用。

sizeof(thelist) ? sizeof(reference_to_a_python_object) * 6000000

第一個列表包含對三個浮點數的相同一個元組的6000000個引用。

第二個列表包含對600萬個不同元組的引用,這些元組包含18000000個不同的浮點數。

http://img1.sycdn.imooc.com//605944bf000142cf05170608.jpg

如您所見,float占用24個字節(jié),triple占用80個字節(jié)(使用python構建)。不,除了numpy之外沒有其他方法。

要將列表變成可收集的垃圾,您需要刪除對它們的任何引用:

del thing1 
del thing2


查看完整回答
反對 回復 2021-03-23
  • 1 回答
  • 0 關注
  • 184 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號