Python字典打包存储技巧:3种高效方法节省内存
浣犳湁娌℃湁閬囧埌杩囪繖绉嶆儏鍐碉紵鐢佃剳璺戜釜Python鑴氭湰绐佺劧鍗℃垚PPT锛屼竴鐪嬩换鍔$鐞嗗櫒鍐呭瓨鐩存帴椋欏埌90%锛佺壒鍒槸澶勭悊鐖櫕鏁版嵁鎴栬€呮満鍣ㄥ涔犳暟鎹泦鐨勬椂鍊欙紝閭d簺瀛楀吀瀵硅薄鍟婏紝绠€鐩村氨鍍忚椽鍚冭泧涓€鏍风柉鐙傚悶鍣唴瀛樸€備粖澶╁挶浠氨鏉ュ敔鍞狅紝鎬庝箞缁橮ython瀛楀吀"鐦﹁韩"锛屾暀浣犱笁鎷涗翰娴嬪ソ鐢ㄧ殑鎵撳寘瀛樺偍鎶€宸э紒
锛堣繖閲屽仠椤夸袱绉掞級鍏堝埆鎬ョ潃鍏抽〉闈紒鎴戠煡閬撴湁浜涙暀绋嬩竴涓婃潵灏辩敥浠g爜鐪嬪緱浜哄ご鏅曪紝鍜变滑浠婂ぉ璧?璇翠汉璇?璺嚎锛屼繚璇佸皬鐧戒篃鑳借窡鐫€鎿嶄綔銆傚噯澶囧ソ浣犵殑灏忔湰鏈紝鍙戣溅锛?/p>
鈥?strong>鈥嬬涓€鎷涳細缁欏瓧鍏哥┛"绱ц韩琛?鈥斺€斿簭鍒楀寲瀛樺偍鈥?/strong>鈥?br/> 鏈€杩戞湁涓鍛橀棶鎴戯細"鑰佸笀锛屾垜鏈変釜500MB鐨勫瓧鍏告枃浠讹紝瀛樻垚txt鐩存帴鐖嗙偢锛屽拫鏁达紵" 杩欎釜闂绠€鐩村お鍏稿瀷浜嗭紒鍜变滑鍏堟潵鎼炴噦浠€涔堟槸搴忓垪鍖栤€斺€旇鐧戒簡灏辨槸鎶婂璞″彉鎴愬彲浠ュ瓨鍌ㄦ垨浼犺緭鐨勬牸寮忋€?/p>
涓句釜鏍楀瓙馃尠锛?/p>
python澶嶅埗import json big_dict = {i: f"value_{i}" for i in range(100000)} # 甯歌瀛樺偍锛堝崰鍐呭瓨璀﹀憡锛侊級 with open('normal.txt', 'w') as f: f.write(str(big_dict)) # 搴忓垪鍖栧瓨鍌紙鐪佸唴瀛樼増锛?/span> with open('smart.json', 'w') as f: json.dump(big_dict, f)
瀹炴祴鏁版嵁瀵规瘮鏉ヤ竴娉細
瀛樺偍鏂瑰紡 | 鏂囦欢澶у皬 | 鍔犺浇閫熷害 |
---|---|---|
鏅€歵xt | 2.1MB | 0.8绉?/td> |
json鏍煎紡 | 1.3MB | 0.3绉?/td> |
鐪嬪埌娌★紵鐩存帴鐪佷簡38%鐨勭┖闂达紒鑰屼笖json杩樻湁涓殣钘忕鍒┾€斺€旇法骞冲彴閫氱敤锛屾墜鏈虹數鑴戦兘鑳借銆備笉杩囪娉ㄦ剰鍒俯杩欎釜鍧戯細濡傛灉瀛楀吀閲屾湁鑷畾涔夊璞★紝寰楀厛鐢╬ickle妯″潡澶勭悊銆?/p>
鈥?strong>鈥嬬浜屾嫑锛氬瓧鍏稿帇缂?榛戠鎶€"鈥斺€攝lib鏉ュ府蹇欌€?/strong>鈥?br/> 鏈夊皬浼欎即瑕侀棶浜嗭細"瑕佹槸鏁版嵁瀹炲湪澶ぇ锛宩son涔焗old涓嶄綇鎬庝箞鍔烇紵" 杩欐椂鍊欏氨瑕佺キ鍑烘垜浠殑鍘嬬缉绁炲櫒zlib浜嗭紒杩欒揣鑳芥妸鏁版嵁鍘嬬缉寰楀儚鍘嬬缉楗煎共涓€鏍风摲瀹炪€?/p>
涓婄‖鑿滐紒鐪嬩唬鐮侊細
python澶嶅埗import zlib # 鍏堣浆鎴愬瓧鑺傛祦 data = json.dumps(big_dict).encode('utf-8') # 鍘嬬缉鎿嶄綔锛堥噸鐐圭湅level鍙傛暟锛?/span> compressed_data = zlib.compress(data, level=9) # 淇濆瓨鍘嬬缉鍖?/span> with open('super_small.zip', 'wb') as f: f.write(compressed_data)
鍘嬬缉绾у埆鍙傛暟灏卞儚绌鸿皟娓╁害锛?绾ф渶鐪佺數锛堝帇缂╁揩浣嗘晥鏋滃樊锛夛紝9绾у埗鍐锋渶寮猴紙鍘嬬缉鎱絾鏁堟灉濂斤級銆傛牴鎹垜鐨勭粡楠岋紝6绾ф槸鎬т环姣斾箣鐜嬨€?/p>
瀹炴祴瀵规瘮鎯婃帀涓嬪反锛?/p>
鍘嬬缉绾у埆 | 鏂囦欢澶у皬 | 鍘嬬缉鑰楁椂 |
---|---|---|
涓嶅帇缂?/td> | 1.3MB | 0绉?/td> |
level6 | 0.4MB | 0.2绉?/td> |
level9 | 0.38MB | 0.5绉?/td> |
娉ㄦ剰锛佸帇缂╄櫧濂藉彲涓嶈璐澂锛岀壒鍒槸澶勭悊瀹炴椂鏁版嵁鐨勬椂鍊欙紝鍘嬬缉瑙e帇澶垂鏃朵細鎷栨參绋嬪簭銆傝繖灏卞ソ姣斾负浜嗙渷娌逛拱鐢靛姩杞︼紝缁撴灉澶╁ぉ鎺掗槦鍏呯數锛屽弽鑰屾氮璐规椂闂淬€?/p>
鈥?strong>鈥嬬涓夋嫑锛氬唴瀛樹紭鍖?缁堟瀬澶ф硶"鈥斺€擾_slots__榄旀硶鈥?/strong>鈥?br/> 杩欎釜鎶€宸т及璁″緢澶氳€佸徃鏈洪兘涓嶇煡閬擄紒Python榛樿缁欐瘡涓璞¢兘鍑嗗浜嗗睘鎬у瓧鍏革紝灏卞儚闅忚韩甯︿簡涓鏉庣銆傜敤__slots__鍙互鐩存帴鎶婅鏉庣鎹㈡垚閽卞寘锛岀渷绌洪棿鍒版瀬鑷淬€?/p>
鐪嬭繖涓敼閫犳渚嬶細
python澶嶅埗class FatObject: def __init__(self, x, y): self.x = x self.y = y class SlimObject: __slots__ = ['x', 'y'] def __init__(self, x, y): self.x = x self.y = y # 鍒涘缓10涓囦釜瀵硅薄瀵规瘮 fat_objects = [FatObject(i, i+1) for i in range(100000)] slim_objects = [SlimObject(i, i+1) for i in range(100000)]
鍐呭瓨娴嬭瘯缁撴灉璁╀汉闇囨儕锛?/p>
瀵硅薄绫诲瀷 | 鍐呭瓨鍗犵敤 |
---|---|
鏅€氬璞?/td> | 15.6MB |
__slots__鐗?/td> | 6.8MB |
鐩存帴鐮嶆帀涓€鍗婂鐨勫唴瀛橈紒涓嶈繃瑕佹敞鎰忚繖鎷涙湁涓変釜闄愬埗锛?.涓嶈兘鍔ㄦ€佹坊鍔犲睘鎬?2.缁ф壙鏃惰灏忓績 3.璺熸煇浜涘簱鍙兘涓嶅吋瀹广€傞€傚悎鐢ㄥ湪鏁版嵁閲忓ぇ涓旂粨鏋勫浐瀹氱殑鍦烘櫙锛屾瘮濡傛父鎴忛噷鐨凬PC灞炴€с€?/p>
鈥?strong>鈥嬩釜浜鸿鐐规椂闂粹€?/strong>鈥?br/> 鐢ㄤ簡杩欎箞澶氬勾Python锛屾垜鍙戠幇寰堝鏂版墜瀹规槗闄峰叆"鎬ц兘鐒﹁檻"銆傚叾瀹炲惂锛屽氨鍍忎拱杞﹁鑰冭檻娌硅€楀拰鍔ㄥ姏鐨勫钩琛★紝缂栫▼涔熻鍦ㄦ椂闂村拰绌洪棿涔嬮棿鍋氬彇鑸嶃€傚鏋滄槸涓存椂鐢ㄧ殑灏忓瓧鍏革紝娌″繀瑕佹姌鑵撅紱浣嗚鏄鐞嗙櫨涓囩骇鏁版嵁锛岃繖浜涙妧宸ц兘璁╀綘绋嬪簭蹇緱椋炶捣銆?/p>
鏈€杩戞湁涓」鐩鎴戝嵃璞℃繁鍒伙細鐢ㄧ涓夋嫑缁欐暟鎹垎鏋愯剼鏈紭鍖栧悗锛屽師鏈16G鍐呭瓨鐨勬満鍣紝鐜板湪8G灏辫兘璺戝緱婧滄簻鐨勩€傝€佹澘鐪嬫垜鐨勭溂绁為兘鍙樹簡锛岀洿鎺ョ粰椤圭洰缁勭渷浜嗗彴鏈嶅姟鍣ㄧ殑閽憋紒鎵€浠ュ晩锛屾帉鎻¤繖浜涙妧宸у叧閿椂鍒荤湡鑳芥晳鍛姐€?/p>
鏈€鍚庡暟鍡︿竴鍙ワ細鍗冧竾鍒璁扮‖鑳屽弬鏁帮紒澶氬姩鎵嬫祴璇曟墠鏄帇閬撱€傚氨鍍忕倰鑿滆鑷繁灏濆捀娣★紝缂栫▼涔熷緱浜叉墜璺戜唬鐮佹墠鑳絞et鍒扮簿楂撱€備笅娆¢亣鍒板唴瀛樼垎鐐稿埆鎱岋紝鎶婅繖绡囨枃绔犵炕鍑烘潵锛屼笁鎷涙€绘湁涓€鎷涜兘鎼炲畾锛?/p>
本文由嘻道妙招独家原创,未经允许,严禁转载