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