python中的變量與內(nèi)存用法
一、變量與內(nèi)存的結(jié)構(gòu)關(guān)系
python的變量類似于標(biāo)簽的作用,內(nèi)容散布于內(nèi)存中,為了方便管理,用變量把這些內(nèi)存中的內(nèi)容標(biāo)示出來(lái)。
如下圖所示:
一般python的內(nèi)存結(jié)構(gòu)以64字節(jié)為一個(gè)單位,隨便在python中申明變量abcdef,并賦上值,對(duì)應(yīng)的內(nèi)存結(jié)構(gòu)大致是這樣:
需要注意的是:
分配出來(lái)的內(nèi)存可能是連續(xù)的,下一個(gè)內(nèi)存比上一個(gè)內(nèi)存多64個(gè)字節(jié),也可能是不連續(xù)的,為64個(gè)字節(jié)的倍數(shù)。
這樣就可以看出來(lái),變量a或是b只是一個(gè)標(biāo)簽,指向?qū)嶋H的內(nèi)容,方便人類識(shí)別他們代表什么東西。
如果把a(bǔ)指向的值賦給b,把e指向的字符串賦給f會(huì)發(fā)生什么呢,
下圖可以表示:
標(biāo)簽a和b指向了實(shí)際內(nèi)容0x12345678, e和f指向了實(shí)際內(nèi)容"dog“,針對(duì)地址0x16a0c466650上的值0x98981234還存在這個(gè)地址上,只是暫時(shí)沒(méi)有變量指向他(在沒(méi)有被系統(tǒng)回收前),同樣,地址0x16a788e32f0上表示的字符串"cat”也同樣沒(méi)有變量指向他。
二、變量的內(nèi)存表示
變量的內(nèi)存表示很簡(jiǎn)單,id()可表示內(nèi)存的十進(jìn)制,若要表示其16進(jìn)制,再加上hex即可
在第一幅圖中變量a和b的指向的地址分別為
- >>>hex(id(a))
- '0x16a0c466610'
- >>>hex(id(b))
- '0x16a0c466650'
在第二幅圖中變量a和b的指向相同的內(nèi)存地址
- >>>hex(id(a))
- '0x16a0c466610'
- >>>hex(id(b))
- '0x16a0c466610'
三、查看內(nèi)存地址的變量
可以用到ctypes的string_at, sys中的getsizeof,再通過(guò)binascii中的hexlify進(jìn)行轉(zhuǎn)碼
# -*- coding: utf-8 -*- from ctypes import string_at from sys import getsizeof from binascii import hexlify a = 0x12345678 print(hexlify(string_at(id(a), getsizeof(a))))
打印出來(lái)的代碼:
b'0300000000000000d00fcd4dfb7f0000010000000000000078563412'
這兒看到末尾的78563412, 相當(dāng)于12, 34, 56, 78 這4個(gè)字節(jié)進(jìn)行了倒序排一下。
由此我們發(fā)現(xiàn)內(nèi)存中數(shù)據(jù)的表示和我們變量的表示是有一定的差異的。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python opencv實(shí)現(xiàn)圖片旋轉(zhuǎn)矩形分割
這篇文章主要為大家詳細(xì)介紹了python opencv實(shí)現(xiàn)圖片旋轉(zhuǎn)矩形分割,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07使用Python實(shí)現(xiàn)將list中的每一項(xiàng)的首字母大寫
今天小編就為大家分享一篇使用Python實(shí)現(xiàn)將list中的每一項(xiàng)的首字母大寫,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06Python爬蟲爬取一個(gè)網(wǎng)頁(yè)上的圖片地址實(shí)例代碼
這篇文章主要介紹了Python爬蟲爬取一個(gè)網(wǎng)頁(yè)上的圖片地址實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01Python Opencv實(shí)戰(zhàn)之文字檢測(cè)OCR
這篇文章主要為大家詳細(xì)介紹了如何利用Python Opencv實(shí)現(xiàn)文字檢測(cè)OCR功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下2022-08-08python使用fileinput模塊實(shí)現(xiàn)逐行讀取文件的方法
這篇文章主要介紹了python使用fileinput模塊實(shí)現(xiàn)逐行讀取文件的方法,涉及Python中fileinput模塊操作文件的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04python bmp轉(zhuǎn)換為jpg 并刪除原圖的方法
今天小編就為大家分享一篇python bmp轉(zhuǎn)換為jpg 并刪除原圖的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10python對(duì)常見(jiàn)數(shù)據(jù)類型的遍歷解析
這篇文章主要介紹了python對(duì)常見(jiàn)數(shù)據(jù)類型的遍歷解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08