python底层原理讲解_python底层原理
有同學(xué)問到了一個問題,python中存儲變量是通過內(nèi)存地址來存儲,那么python又是如何去判斷內(nèi)存中的地址是什么數(shù)據(jù)類型的呢。經(jīng)過查找,找到這篇文章:
原博客地址:http://www.cnblogs.com/aashui/p/9871009.html
1.Python是如何進(jìn)行內(nèi)存管理的?
答:從三個方面來說,一對象的引用計數(shù)機(jī)制,二垃圾回收機(jī)制,三內(nèi)存池機(jī)制
一、對象的引用計數(shù)機(jī)制
Python內(nèi)部使用引用計數(shù),來保持追蹤內(nèi)存中的對象,所有對象都有引用計數(shù)。
引用計數(shù)增加的情況:
1,一個對象分配一個新名稱
2,將其放入一個容器中(如列表、元組或字典)
引用計數(shù)減少的情況:
1,使用del語句對對象別名顯示的銷毀
2,引用超出作用域或被重新賦值
sys.getrefcount( )函數(shù)可以獲得對象的當(dāng)前引用計數(shù)
多數(shù)情況下,引用計數(shù)比你猜測得要大得多。對于不可變數(shù)據(jù)(如數(shù)字和字符串),解釋器會在程序的不同部分共享內(nèi)存,以便節(jié)約內(nèi)存。
二、垃圾回收
1,當(dāng)一個對象的引用計數(shù)歸零時,它將被垃圾收集機(jī)制處理掉。
2,當(dāng)兩個對象a和b相互引用時,del語句可以減少a和b的引用計數(shù),并銷毀用于引用底層對象的名稱。然而由于每個對象都包含一個對其他對象的應(yīng)用,因此引用計數(shù)不會歸零,對象也不會銷毀。(從而導(dǎo)致內(nèi)存泄露)。為解決這一問題,解釋器會定期執(zhí)行一個循環(huán)檢測器,搜索不可訪問對象的循環(huán)并刪除它們。
三、內(nèi)存池機(jī)制
Python提供了對內(nèi)存的垃圾收集機(jī)制,但是它將不用的內(nèi)存放到內(nèi)存池而不是返回給操作系統(tǒng)。
1,Pymalloc機(jī)制。為了加速Python的執(zhí)行效率,Python引入了一個內(nèi)存池機(jī)制,用于管理對小塊內(nèi)存的申請和釋放。
2,Python中所有小于256個字節(jié)的對象都使用pymalloc實(shí)現(xiàn)的分配器,而大的對象則使用系統(tǒng)的malloc。
3,對于Python對象,如整數(shù),浮點(diǎn)數(shù)和List,都有其獨(dú)立的私有內(nèi)存池,對象間不共享他們的內(nèi)存池。也就是說如果你分配又釋放了大量的整數(shù),用于緩存這些整數(shù)的內(nèi)存就不能再分配給浮點(diǎn)數(shù)。
由上述可以看出,當(dāng)我們創(chuàng)建一個整數(shù)變量如,Num_int = 1?? 此時必定會有一個內(nèi)存地址A(假設(shè))指向1這個數(shù)據(jù)。此時Num_Int 指向的地址也是地址A。當(dāng)我們創(chuàng)建這個整數(shù)對象時,實(shí)際上1這個數(shù)據(jù)已經(jīng)存向了我們內(nèi)存中指定存放整數(shù)的地方,如下圖:
也就是說,在我們創(chuàng)建整數(shù)變量或者其他變量時,python已經(jīng)幫你找到了固定的位置,然后你將數(shù)據(jù)存進(jìn)去就可以了。不管你怎么存,只是地址變了,并且你的地址如果是相同的數(shù)據(jù)類型,那么應(yīng)該是有相似點(diǎn)的,比如? A (內(nèi)存地址) = 10001? 那么可能你再創(chuàng)建一個變量 時 B(內(nèi)存地址) = 10002 。本人理解是這樣,若有不對請指出,謝謝!
Python 底層原理知識
1.Python是如何進(jìn)行內(nèi)存管理的? 答:從三個方面來說,一對象的引用計數(shù)機(jī)制,二垃圾回收機(jī)制,三內(nèi)存池機(jī)制 一.對象的引用計數(shù)機(jī)制 Python內(nèi)部使用引用計數(shù),來保持追蹤內(nèi)存中的對象,所有對象都 ...
操作系統(tǒng)底層原理與Python中socket解讀
目錄 操作系統(tǒng)底層原理 網(wǎng)絡(luò)通信原理 網(wǎng)絡(luò)基礎(chǔ)架構(gòu) 局域網(wǎng)與交換機(jī)/網(wǎng)絡(luò)常見術(shù)語 OSI七層協(xié)議 TCP/IP五層模型講解 Python中Socket模塊解讀 TCP協(xié)議和UDP協(xié)議 操作系統(tǒng)底層原理 ...
Python多線程原理與實(shí)現(xiàn)
Date: 2019-06-04 Author: Sun Python多線程原理與實(shí)戰(zhàn) 目的: (1)了解python線程執(zhí)行原理 (2)掌握多線程編程與線程同步 (3)了解線程池的使用 1 線程基本 ...
Docker底層原理介紹
1.docker介紹 1.1什么是docker Docker 是一個開源的應(yīng)用容器引擎,基于 Go 語言 并遵從Apache2.0協(xié)議開源. Docker 可以讓開發(fā)者打包他們的應(yīng)用以及依賴包到一個輕 ...
Android進(jìn)程永生技術(shù)終極揭秘:進(jìn)程被殺底層原理、APP應(yīng)對技巧
1.引言 上個月在知乎上發(fā)表的由“袁輝輝”分享的關(guān)于TIM進(jìn)程永生方面的文章(即時通訊網(wǎng)重新整理后的標(biāo)題是:),短時間內(nèi) ...
Python底層socket庫
Python底層socket庫將Unix關(guān)于網(wǎng)絡(luò)通信的系統(tǒng)調(diào)用對象化處理,是底層函數(shù)的高級封裝,socket()函數(shù)返回一個套接字,它的方法實(shí)現(xiàn)了各種套接字系統(tǒng)調(diào)用.read與write與Python ...
Neo4j圖數(shù)據(jù)庫簡介和底層原理
現(xiàn)實(shí)中很多數(shù)據(jù)都是用圖來表達(dá)的,比如社交網(wǎng)絡(luò)中人與人的關(guān)系.地圖數(shù)據(jù).或是基因信息等等.RDBMS并不適合表達(dá)這類數(shù)據(jù),而且由于海量數(shù)據(jù)的存在,讓其顯得捉襟見肘.NoSQL數(shù)據(jù)庫的興起,很好地解決了海 ...
【T-SQL進(jìn)階】02.理解SQL查詢的底層原理
本系列[T-SQL]主要是針對T-SQL的總結(jié). [T-SQL基礎(chǔ)]01.單表查詢-幾道sql查詢題 [T-SQL基礎(chǔ)]02.聯(lián)接查詢 [T-SQL基礎(chǔ)]03.子查詢 [T-SQL基礎(chǔ)]04.表表達(dá)式 ...
spring框架的IOC的底層原理
1.IOC概念:spring容器創(chuàng)建對象并管理 2.IOC的底層原理的具體實(shí)現(xiàn): 1)所使用的技術(shù): (1).?dom4j解析xml配置文件 (2).工廠設(shè)計模式(解耦合) (3).反射 第一步:配置 ...
隨機(jī)推薦
實(shí)現(xiàn)了IEnumerable接口的GetEnumerator 即可使用 Foreach遍歷,返回一個IEnumerator對象
#region 程序集 mscorlib.dll, v4.0.0.0 // C:\Program Files (x86)\Reference Assemblies\Microsoft\Framewor ...
win7自帶windows media player 已停止工作
解決方法如下: 在計算機(jī)開始,菜單找到控制面板?,然后打開程序和功能,選擇打開或關(guān)閉window功能,媒體功能.再取消windows Media Center Windows MediaPlayer選 ...
R-Studio
R-Studio是一個功能強(qiáng)大.節(jié)省成本的反刪除和數(shù)據(jù)恢復(fù)軟件系列.它采用獨(dú)特的數(shù)據(jù)恢復(fù)新技術(shù),為恢復(fù)FAT12/16/32.NTFS.NTFS5(由 Windows 2000/XP/2003/Vis ...
PuTTY 信息泄露漏洞
漏洞名稱: PuTTY 信息泄露漏洞 CNNVD編號: CNNVD-201308-380 發(fā)布時間: 2013-08-27 更新時間: 2013-08-27 危害等級: 低危?? 漏洞類型: 信息泄露 ...
IOS 推送原理
最近兩天在研究ios的消息推送機(jī)制.研究這個東西,還是充滿興趣的. Push的原理: Push 的工作機(jī)制可以簡單的概括為下圖 圖中,Provider是指某個iPhone軟件的Push服務(wù)器,這篇文章 ...
簡單購物車程序(Python)
#簡單購物車程序:money_all=0tag=Trueshop_car=[]shop_info={'apple':10,'tesla':100000,'mac':3000,'lenovo':3000 ...
國內(nèi)開源社區(qū)巨作AspectCore-Framework入門
前些天和張隊(善友),lemon(浩洋),斌哥(項斌)等MVP大咖一塊兒吃飯,大家聊到了lemon名下的AOP這個項目,我這小白聽得一臉懵逼,后面回來做了一下功課,查了下資料,在lemon的Githu ...
TensorFlow函數(shù):tf.reduce_sum
tf.reduce_sum 函數(shù) reduce_sum ( input_tensor , axis = None , keep_dims = False , name = None , reducti ...
LeetCode題解:Flatten Binary Tree to Linked List:別人的遞歸!
總是在看完別人的代碼之后,才發(fā)現(xiàn)自己的差距! 我的遞歸: 先把左側(cè)扁平化,再把右側(cè)扁平化. 然后找到左側(cè)最后一個節(jié)點(diǎn),把右側(cè)移動過去. 然后把左側(cè)整體移到右側(cè),左側(cè)置為空. 很復(fù)雜吧! 如果節(jié)點(diǎn)很長的 ...
DPDK實(shí)例程序:testpmd
用戶手冊:https://doc.dpdk.org/guides/testpmd_app_ug/index.html 還不錯的入門:http://syswift.com/188.html 我的運(yùn)行情況 ...
總結(jié)
以上是生活随笔為你收集整理的python底层原理讲解_python底层原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: http协议 文件下载原理详解
- 下一篇: Python 详解九九乘法表