您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關如何在python 中使用sys.getsizeof,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
(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)
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的五大特點:1.簡單易學,開發程序時,專注的是解決問題,而不是搞明白語言本身。2.面向對象,與其他主要的語言如C++和Java相比, Python以一種非常強大又簡單的方式實現面向對象編程。3.可移植性,Python程序無需修改就可以在各種平臺上運行。4.解釋性,Python語言寫的程序不需要編譯成二進制代碼,可以直接從源代碼運行程序。5.開源,Python是 FLOSS(自由/開放源碼軟件)之一。
以上就是如何在python 中使用sys.getsizeof,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。