python中有一個說法:一切皆是對象,怎麼理解這句話呢?我們可以通過查看數字,字符串在內存中的表示形式來對這句話有個更深的認識。
那麼,怎麼查看對象在內存中是什麼樣的呢?可以先參考一些這篇文章:https://www.cnblogs.com/wujiecong/p/11583540.html
1.python的數字在內存中是什麼樣的?
#python3.7
from ctypes import string_at
from sys import getsizeof
from binascii import hexlify
a = 2333
print(hexlify(string_at(id(a),getsizeof(a))))
運行結果則是數字2333在內存中的數據的十六進制表示(變量a實際上是指向2333所在的內存地址
b'0200000000000000e0316c93f87f000001000000000000001d090000'
從結果來看,數字“2333”在內存中存儲着不少的信息。我們可以按照PyObject結構將其拆解開來。
|
|
|
|
引用計數 | 類型 | 值 |
對以上數據進行校驗:
1.2333的的16進製表示是91D,看來採用的是小端模式。
2.通過sys.getrefcount()查看引用計數
3.int的子類是它本身
2.python會動態地給數字對象分配內存,那界限是什麼呢?
經過試驗,不同的環境機器有不同的界限,本機是0x3FFFFFFF
菜鳥的在線工具是0x7FFFFFFFFFFFFFFF
3.int對象的結構
查看源碼裏int對象的結構,與我們在內存上看到的一致。
typedef struct {
Py_ssize_t ob_refcnt;
struct _typeobject *ob_type;
long ob_ival;
} PyIntObject
原文出處:https://www.cnblogs.com/wujiecong/p/11579132.html