亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

python 中sys.getsizeof的用法說明

瀏覽:19日期:2022-06-18 14:16:30

科班出身的碼畜一直被灌輸一條上帝圣經(jīng):“一個int占4個字節(jié),一個char占1個字節(jié),一個float占4個字節(jié)。。。”,

今天看下了python的getsizeof函數(shù),發(fā)現(xiàn)python中各個基本數(shù)據(jù)類型(對象)占用的內(nèi)存大小和c++/Java完全不一樣~

前提概述:python中一切都是對象,so python中其實(shí)根本不存在int float這些類型,int其實(shí)是一個python對象。

int:28float:24string:54list():64{}:288ste():224

python 中sys.getsizeof的用法說明

此外,

(1)sys.getsizeof只計算實(shí)際使用的內(nèi)存大小,引用所消耗的內(nèi)存大小不計算。

(2)sys.getsizeof只能作為計算內(nèi)存大小的參考~

這里有一個問題,為什么python各個數(shù)據(jù)類型占用大小和c++中不一致呢?

這里本質(zhì)上是由python的實(shí)現(xiàn)所決定的,python代碼在運(yùn)行的時候會由python解析器執(zhí)行,具體會解析為C語言的某種結(jié)構(gòu)。也就是說,python中的一個int(或其他)映射到c語言中會是一種復(fù)雜結(jié)構(gòu)體。

以python的int為例說明,下面是python的int在C中的具體形式:

typedef struct { PyObject_HEAD long ob_ival;} PyIntObject;

struct _longobject { long ob_refcnt; // 引用計數(shù) PyTypeObject *ob_type; //變量類型 size_t ob_size; //實(shí)際占用內(nèi)容大小 long ob_digit[1]; //存儲的實(shí)際python值};

發(fā)現(xiàn)沒有,python實(shí)際的值只是相應(yīng)C結(jié)構(gòu)中的一個屬性,難怪python的int占28個字節(jié),而C語言只需要4個字節(jié),因?yàn)閜ython還存儲了很多相關(guān)的其他信息!其他信息是實(shí)際數(shù)值的6倍大小!

發(fā)現(xiàn)沒有,python實(shí)際的值只是相應(yīng)C結(jié)構(gòu)中的一個屬性,難怪python的int占28個字節(jié),而C語言只需要4個字節(jié),因?yàn)閜ython還存儲了很多相關(guān)的其他信息!其他信息是實(shí)際數(shù)值的6倍大小!

ps:想要精準(zhǔn)控制內(nèi)存大小,使用c++或者Java吧~

補(bǔ)充:使用 sys.getsizeof 查看 python 對象的內(nèi)存占用

使用 sys.getsizeof 方法可以查看 python 對象的內(nèi)存占用,單位:字節(jié) (byte)

實(shí)際上是調(diào)用了 __sizeof__ 方法:

In [35]: import sysIn [36]: sys.getsizeof(’hello world’)Out[36]: 60In [37]: ’hello world’.__sizeof__()Out[37]: 60

有些數(shù)據(jù)類型在 Python3 和 Python2 中占用的內(nèi)存是不同的,

例如 range :

# python3In [38]: sys.getsizeof(range(999))Out[38]: 48In [39]: sys.getsizeof(iter(range(999)))Out[39]: 48# python2>>> sys.getsizeof(range(999))8064>>> sys.getsizeof(iter(range(999)))64

關(guān)于這個值是怎么算出來的,有待研究~

暫時已知:這個值包括該對象的數(shù)值、簽名(包括數(shù)據(jù)類型、參數(shù)、調(diào)用方式等)等一系列數(shù)據(jù)所占總內(nèi)存。可變對象所占內(nèi)存可能極小,因?yàn)閷ο笫侵羔槪赶蚝艽蟮臄?shù)據(jù)。

In [65]: s = sys.getsizeofIn [66]: s(1)Out[66]: 28In [67]: s(11)Out[67]: 28In [68]: s(11111111)Out[68]: 28In [69]: s(1111111111)Out[69]: 32

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 国产日韩欧美在线观看播放 | 97视频在线免费观看 | 你懂的网站在线播放 | 人人做天天爱夜夜爽中字 | 国产婷婷色一区二区三区 | 一级免费黄色录像 | 亚洲 另类色区 欧美日韩 | 中文字幕在线观看不卡 | 免费国产免费福利视频 | 奶茶视频污 | 狠狠色婷婷综合天天久久丁香 | 小蝌蚪在线成人免费视频 | 国产精品免费一区二区三区四区 | 国产福利视频在线观看 | 国产精品亚洲第一区在线28石 | 久久久久国产一级毛片高清版 | 国产成人午夜福在线观看 | 亚洲成人mv | 婷婷丁香六月天 | 欧美日韩在线观看区一二 | 久久国产免费观看精品3 | 毛片毛片毛片毛片出来毛片 | 中文精品99久久国产 | 亚洲国产精品嫩草影院久久 | 国产精品久久1024 | 成人看的午夜免费毛片 | 国产一区二区久久精品 | 亚洲欧美中文v日韩v在线 | 老外一级毛片免费看 | 国产麻豆视频在线观看 | 国产日韩欧美综合一区 | 福利在线不卡 | 亚洲欧美视频网站 | 欧美日韩亚洲国产一区二区三区 | 久草资源站在线 | 首页国产精品萌社区 | 日本一级成人毛片免费观看 | 中文字幕永久在线视频 | 久久综合一区二区 | 国产精品爱久久电影 | 亚洲欧美一二三区 |