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

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

Python LinkedList中的內(nèi)存分配錯誤

Python LinkedList中的內(nèi)存分配錯誤

牧羊人nacy 2021-03-22 13:14:46
關(guān)于Python簡單鏈表及其內(nèi)存消耗,我遇到了一些問題。這是代碼:import sysclass Record:    def __init__(self,elem):        self.elem=elem        self.next=None    def size(self):        print 'elem.size = ', sys.getsizeof(self.elem)        print 'next.size = ', sys.getsizeof(self.next)class LinkedList:    def __init__(self):        self.first=None        self.last=None    def addAsLast(self,elem):        rec=Record(elem)        if self.first==None:            self.first=self.last=rec        else:            self.last.next=rec            self.last=recif __name__=="__main__":    l=LinkedList()    r = Record(1)    r.size()    maxx = 10000000    r = range(1, maxx)    print 'size of r: ', sys.getsizeof(r)    print 'size of r[n-1]: ', sys.getsizeof(r[maxx-2])    for i in r:        if(i% (maxx/10) == 0): print '.'        l.addAsLast(i)    print "The End"我的問題是:運行此腳本消耗1.7 GB的RAM。輸出為:elem.size =  12 next.size =  8 size of r:  40000028size of r[n-1]:  12因此,讓我們做一些快速的數(shù)學(xué)運算:1000萬條記錄。每條記錄有12個字節(jié)(元素)+ 8個字節(jié)(指向下一個的指針)= 20個字節(jié)20字節(jié)* 1000萬= 200.000.000字節(jié)= 190.7 MB即使我必須考慮由range()函數(shù)分配的列表(大約30 MB),如何管理巨大的內(nèi)存消耗缺口?我在這段代碼中犯了一些愚蠢的錯誤嗎?我希望這個答案會讓我感到and愧和遺憾,但是,據(jù)我所知,我只是想知道發(fā)生了什么!
查看完整描述

2 回答

?
一只甜甜圈

TA貢獻(xiàn)1836條經(jīng)驗 獲得超5個贊

更改了打印輸出,如下所示:


class Record:

    def __init__(self,elem):

        self.elem=elem

        self.next=None


    def size(self):

        print 'Record size = ', sys.getsizeof(self)

        print 'elem.size = ', sys.getsizeof(self.elem)

        print 'next.size = ', sys.getsizeof(self.next)

輸出 :


Record size =  72

elem.size =  24

next.size =  16

因此,我的每個鏈表節(jié)點均為72字節(jié)x 10M,應(yīng)為720MB,.72GB


我運行該程序,并使用top看到內(nèi)存開銷為3.6G。我的elem大小是您的兩倍,而我注意到消耗的總內(nèi)存是您的兩倍(3.6G,而1.7G)。


這一定是由于額外的python內(nèi)存開銷,例如垃圾回收。


查看完整回答
反對 回復(fù) 2021-03-30
?
當(dāng)年話下

TA貢獻(xiàn)1890條經(jīng)驗 獲得超9個贊

>>> class Record:

...     def __init__(self, elem):

...             self.elem = elem

...             self.next = None   

... 

>>> r = Record(1)

>>> sys.getsizeof(r)

72

還是我錯過了什么?


另外,在我的系統(tǒng)上:


>>> sys.getsizeof(1)

24

>>> sys.getsizeof(None)

16


查看完整回答
反對 回復(fù) 2021-03-30
  • 2 回答
  • 0 關(guān)注
  • 254 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號