最近碰處處理一個二十多兆的文件時內存蹭蹭的吃掉四百多兆,嚇死寶寶了。python
無奈畢竟接觸python時間有限,尚未完整的看過python的一些基礎知識,我想一個合格的pythoner應該不會碰到這個問題。固然像我這樣的操做黨碰到的問題映像也更深一點。最鬱悶的是網上討論這個的頗有限,google的結果也是三天才找到相應的說明,我想這裏很重要的一點是海量數據在存儲和很低層的操做時並不會使用python,嵌入一個c片斷便可。好吧這招我還不會,並且在用的庫要改也是件痛苦的事,爲了讓項目儘早上線有個折中的方案頂上便可。在無盡的排查後發現,原來python這個東東爲了讓你們寫的爽,在性能上事丟的不要不要的,通常的系統還看不出問題,一但不是它原聲的一些對象問題就來了,原來python在實現不少功能時並不像c那樣極致,而是丟失性能換來魔法般的靈活性,而這個惡魔就是字典,自定義類的屬性它竟然使用字典來實現的。固然python設計時假設class的使用場景並無特定於像c的struct那麼高效,好在留了一手,能夠像以下添加__slots__來縮減class,使得其佔用內存更緊湊接近於list,對了list比tuple要差一點,畢竟它功能更多一點,不過我以爲與其省下list這點還不如換c更實在。添加__slots__後的代碼以下:性能
class Date: __slots__ = ['year', 'month', 'day'] def __init__(self, year, month, day): self.year = year self.month = month self.day = day