一、is和"=="
- is比較的是內存地址的大小是否相等
- ==表示的是值(或者說內容是否相等)
- id()函數,可以獲取內存地址
不論什麼數據類型這兩個都是這樣子的。
二、python垃圾回收機制簡單介紹
引用計數:內存中的值被引用的次數,當計數爲0時,該變量值就成爲了垃圾,就會被回收。
下述情況計數會加1:
對象被創建 a=14
對象被引用 b=a
對象被作爲參數,傳到函數中 func(a)
對象作爲一個元素,存儲在容器(比如數組、列表、元組)
中 List={a,“a”,“b”,2}
與上述情況相對應,當發生以下四種情況時,計數器-1
當該對象的別名被顯式銷燬時 del a
當該對象的引別名被賦予新的對象 a=26
一個對象離開它的作用域,例如 func函數執行完畢時,函數裏面的局部變量的引用計數器就會減一(但是全局變量不會
)
將該元素從容器中刪除時,或者容器被銷燬時。
三、變量內存管理
變量名其實存儲的是一個變量值所在的物理內存地址
a = 'info: egon: 18'
b = 'info: egon: 18'
print(a is b)
像上面這樣子分別設置的變量,並不是指向同一個內存地址,無論變量值是否相等,都會開闢新的地址空間存儲。
a = 'info: egon: 18'
b = a
print(a is b)
這個相當於賦值的是內存地址,所以並沒有開闢新的地址空間
四、小整數池
請問爲什麼這個的內存地址又是相等的呢?
像一些小整數,使用比較頻繁,python就在python解釋器啓動之後,馬上創建了一塊內存空間專門存儲[-5,256]
的小整數,避免執行程序時,會創建很多重複的小整數空間。
五、python自帶和pycharm
python自帶:
pycharm:
大家都認爲pycharm和python自帶的這個沒有什麼區別,只是界面更美觀了而已。
其實不然。