c - 為什么python中值相等的兩個(gè)變量會(huì)指向同一個(gè)內(nèi)存地址?
問題描述
http://www.cnblogs.com/lolein... 下面是這個(gè)文章里面所演示的代碼,
>>> a=1>>> b=1>>> id(a)40650152>>> id(b)40650152>>> a=2>>> id(a)40650140
我有點(diǎn)費(fèi)解的就是,按道理a和b完全就不是同一個(gè)變量,那么理論上他們無論值是什么,都應(yīng)該是放在兩個(gè)不同的內(nèi)存空間啊,為什么他們相等的時(shí)候就放在了同一個(gè)內(nèi)存空間呢?難道是python的運(yùn)行時(shí)環(huán)境會(huì)自動(dòng)判斷他們的值,如果相同就放到同一個(gè)內(nèi)存空間,為的是節(jié)省內(nèi)存占用嗎?
問題解答
回答1:Python實(shí)現(xiàn)int的時(shí)候有個(gè)小整數(shù)池。為了效率, Python首先在內(nèi)心里創(chuàng)建出這些整數(shù),然后復(fù)用了這部分整數(shù),創(chuàng)建一個(gè)值為1的int,其實(shí)直接從這個(gè)池里拿出1。一般是-5到257。你弄個(gè)1000 500啥的看看。就不會(huì)這樣了。看看這個(gè):python整數(shù)對(duì)象實(shí)現(xiàn)
回答2:為了性能上的優(yōu)化而使用了常量池。而且這也不是 python 獨(dú)有的,很多其他語言也使用了類似的技巧。
回答3:https://github.com/python/cpy...
相關(guān)文章:
1. mysql優(yōu)化 - 關(guān)于mysql分區(qū)2. javascript - 循環(huán)嵌套多個(gè)promise應(yīng)該如何實(shí)現(xiàn)?3. 前端 - IE9 css兼容問題4. css - 移動(dòng)端字體設(shè)置問題5. html5 - 如何實(shí)現(xiàn)帶陰影的不規(guī)則容器?6. vue.js - vue 打包后 nginx 服務(wù)端API請(qǐng)求跨域問題無法解決。7. javascript - ionic2 input autofocus 電腦成功,iOS手機(jī)鍵盤不彈出8. node.js - 在vuejs-templates/webpack中dev-server.js里為什么要exports readyPromise?9. css3 - rem布局下,用戶瀏覽器的最小字號(hào)是12px怎么辦?10. objective-c - iOS開發(fā)支付寶和微信支付完成為什么跳轉(zhuǎn)到了之前開發(fā)的一個(gè)app?
