欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python 中sys.getsizeof的用法說明

 更新時間:2021年05月25日 11:51:53   作者:kelly學挖掘  
這篇文章主要介紹了python 中sys.getsizeof的用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

科班出身的碼畜一直被灌輸一條上帝圣經(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中其實根本不存在int float這些類型,int其實是一個python對象。

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

此外,

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

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

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

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

以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;  //實際占用內(nèi)容大小
    long ob_digit[1];  //存儲的實際python值
};

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

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

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

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

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

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

In [35]: import sys

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

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

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

例如 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

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

暫時已知:這個值包括該對象的數(shù)值、簽名(包括數(shù)據(jù)類型、參數(shù)、調(diào)用方式等)等一系列數(shù)據(jù)所占總內(nèi)存??勺儗ο笏純?nèi)存可能極小,因為對象是指針,指向很大的數(shù)據(jù)。

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

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

相關文章

  • python flask服務端響應與重定向處理各種用法小結

    python flask服務端響應與重定向處理各種用法小結

    這篇文章主要介紹了python flask服務端響應與重定向處理各種用法小結,本文通過實例圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-03-03
  • Python中網(wǎng)絡請求中Retry策略實現(xiàn)方式

    Python中網(wǎng)絡請求中Retry策略實現(xiàn)方式

    這篇文章主要介紹了Python中網(wǎng)絡請求中Retry策略實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • pytorch獲取模型某一層參數(shù)名及參數(shù)值方式

    pytorch獲取模型某一層參數(shù)名及參數(shù)值方式

    今天小編就為大家分享一篇pytorch獲取模型某一層參數(shù)名及參數(shù)值方式,具有很好的價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 淺析python中的set類型

    淺析python中的set類型

    這篇文章主要介紹了python中的set類型,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Python設計模式結構型代理模式

    Python設計模式結構型代理模式

    這篇文章主要介紹了Python設計模式結構型代理模式,代理模式即Proxy?Pattern,為其他對象提供一種代理以控制對這個對象的訪問,下文內(nèi)容詳細介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-02-02
  • Python中的map()、apply()、applymap()的區(qū)別小結

    Python中的map()、apply()、applymap()的區(qū)別小結

    map()、apply()和applymap()方法是Python中常用的轉(zhuǎn)換方法,,輸出的結果及類型完全取決于作為給定方法的參數(shù)的函數(shù),本文就來介紹一下這三種方法的區(qū)別,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • Python利用全連接神經(jīng)網(wǎng)絡求解MNIST問題詳解

    Python利用全連接神經(jīng)網(wǎng)絡求解MNIST問題詳解

    這篇文章主要介紹了Python利用全連接神經(jīng)網(wǎng)絡求解MNIST問題,結合實例形式詳細分析了單隱藏層神經(jīng)網(wǎng)絡與多層神經(jīng)網(wǎng)絡,以及Python全連接神經(jīng)網(wǎng)絡求解MNIST問題相關操作技巧,需要的朋友可以參考下
    2020-01-01
  • python pandas loc 布爾索引示例說明

    python pandas loc 布爾索引示例說明

    loc跟iloc的區(qū)別,首先loc是location的意思,和iloc中i的意思是指integer,所以它只接受整數(shù)作為參數(shù),詳情見下面
    2022-03-03
  • 為python爬蟲docker鏡像添加nodejs環(huán)境實現(xiàn)方法

    為python爬蟲docker鏡像添加nodejs環(huán)境實現(xiàn)方法

    這篇文章主要為大家介紹了為python爬蟲docker鏡像添加nodejs環(huán)境實現(xiàn)方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Anaconda環(huán)境改名的實現(xiàn)步驟

    Anaconda環(huán)境改名的實現(xiàn)步驟

    本文主要介紹了Anaconda環(huán)境改名的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07

最新評論