溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何在python 中使用sys.getsizeof

發(fā)布時間:2021-05-25 15:56:57 來源:億速云 閱讀:337 作者:Leah 欄目:開發(fā)技術(shù)

本篇文章給大家分享的是有關(guān)如何在python 中使用sys.getsizeof,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

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

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

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

這里本質(zhì)上是由python的實現(xiàn)所決定的,python代碼在運行的時候會由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;  //實際占用內(nèi)容大小
    long ob_digit[1];  //存儲的實際python值
};

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

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

ps:想要精準(zhǔn)控制內(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

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

暫時已知:這個值包括該對象的數(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

python的五大特點是什么

python的五大特點:1.簡單易學(xué),開發(fā)程序時,專注的是解決問題,而不是搞明白語言本身。2.面向?qū)ο?,與其他主要的語言如C++和Java相比, Python以一種非常強大又簡單的方式實現(xiàn)面向?qū)ο缶幊獭?.可移植性,Python程序無需修改就可以在各種平臺上運行。4.解釋性,Python語言寫的程序不需要編譯成二進(jìn)制代碼,可以直接從源代碼運行程序。5.開源,Python是 FLOSS(自由/開放源碼軟件)之一。

以上就是如何在python 中使用sys.getsizeof,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI