校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > python 中sys.getsizeof的用法說明

python 中sys.getsizeof的用法說明

熱門標簽:河北防封卡電銷卡 400電話辦理哪種 手機網頁嵌入地圖標注位置 開封語音外呼系統代理商 電銷機器人的風險 地圖標注線上如何操作 天津電話機器人公司 應電話機器人打電話違法嗎 開封自動外呼系統怎么收費

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

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

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

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

此外,

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

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

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

這里本質上是由python的實現所決定的,python代碼在運行的時候會由python解析器執行,具體會解析為C語言的某種結構。也就是說,python中的一個int(或其他)映射到c語言中會是一種復雜結構體。

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

typedef struct {
    PyObject_HEAD
    long ob_ival;
} PyIntObject;
struct _longobject {
    long ob_refcnt;  // 引用計數
    PyTypeObject *ob_type; //變量類型
    size_t ob_size;  //實際占用內容大小
    long ob_digit[1];  //存儲的實際python值
};

發現沒有,python實際的值只是相應C結構中的一個屬性,難怪python的int占28個字節,而C語言只需要4個字節,因為python還存儲了很多相關的其他信息!其他信息是實際數值的6倍大小!

發現沒有,python實際的值只是相應C結構中的一個屬性,難怪python的int占28個字節,而C語言只需要4個字節,因為python還存儲了很多相關的其他信息!其他信息是實際數值的6倍大小!

ps:想要精準控制內存大小,使用c++或者Java吧~

補充:使用 sys.getsizeof 查看 python 對象的內存占用

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

實際上是調用了 __sizeof__ 方法:

In [35]: import sys

In [36]: sys.getsizeof('hello world')
Out[36]: 60

In [37]: 'hello world'.__sizeof__()
Out[37]: 60

有些數據類型在 Python3 和 Python2 中占用的內存是不同的,

例如 range :

# python3
In [38]: sys.getsizeof(range(999))
Out[38]: 48

In [39]: sys.getsizeof(iter(range(999)))
Out[39]: 48

# python2
>>> sys.getsizeof(range(999))
8064
>>> sys.getsizeof(iter(range(999)))
64

關于這個值是怎么算出來的,有待研究~

暫時已知:這個值包括該對象的數值、簽名(包括數據類型、參數、調用方式等)等一系列數據所占總內存。可變對象所占內存可能極小,因為對象是指針,指向很大的數據。

In [65]: s = sys.getsizeof

In [66]: s(1)
Out[66]: 28

In [67]: s(11)
Out[67]: 28

In [68]: s(11111111)
Out[68]: 28

In [69]: s(1111111111)
Out[69]: 32

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Python getsizeof()和getsize()區分詳解
  • python—sys模塊之獲取參數的操作
  • 解決python中os.system調用exe文件的問題
  • 使用Python對Syslog信息進行分析并繪圖的實現
  • python中sys模塊的介紹與實例
  • python sys.stdin和sys.stdout的用法說明

標簽:六盤水 宿遷 山東 蘭州 常州 江蘇 成都 駐馬店

巨人網絡通訊聲明:本文標題《python 中sys.getsizeof的用法說明》,本文關鍵詞  python,中,sys.getsizeof,的,用法,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python 中sys.getsizeof的用法說明》相關的同類信息!
  • 本頁收集關于python 中sys.getsizeof的用法說明的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 贺兰县| 维西| 姜堰市| 穆棱市| 安新县| 南丰县| 淮安市| 澳门| 长白| 休宁县| 奎屯市| 海口市| 榆中县| 怀化市| 涟源市| 枞阳县| 鞍山市| 合水县| 东阳市| 土默特左旗| 青阳县| 梁河县| 桃源县| 木兰县| 禹州市| 安庆市| 通许县| 莆田市| 丹江口市| 辽中县| 淮北市| 信丰县| 翁源县| 东兰县| 凯里市| 天等县| 双鸭山市| 堆龙德庆县| 邢台县| 龙岩市| 民和|