# -*- coding: utf-8 -*-# python
中自動管理記憶體的
# 自動管理記憶體程式語言 例如:
object-c python
# 手動管理記憶體程式語言 例如:
c# python
中的記憶體管理採用的
'引用計數
'的方式
, 如果乙個物件的引用計數為
0,該物件占用的記憶體會被
python
直譯器清空,物件也會消失,如果乙個物件的引用計數超過
0,這個物件會一直存放在記憶體中
# python
中是自動管理記憶體的,實際上是通過
"引用計數
"的方式來管理記憶體。當乙個物件被建立出來的時候,引用計數為
1,當物件被其他物件引用時,引用計數會加
1,當物件的引用被刪除時,引用計數會
-1,當物件的引用計數為
0時,該物件所在記憶體會被系統在合適時間**
'''物件在記憶體無法釋放的情況,稱之為記憶體洩露,記憶體洩露會導致程式占用記憶體過多,程式出現卡頓的情況,嚴重情況可能會導致記憶體崩潰,程式結束或者閃退
物件多次刪除,導致引用計數過渡減少,在之後的**中有可能導致該物件不可用
'''# sys
作業系統模組
import sys
class people(object):
pass
# 當建立乙個物件時,這個物件的計數為
1p1 = people()
# 通過個函式可以檢視物件的引用計數
# ps
:在這查到的是
2,自己建立物件的時候
+1,編譯程式的時候,直譯器
+1(不需要我們管理
)number = sys.getrefcount(p1)
print(number)
# 當物件被引用的時候,引用計數會
+1p2 = p1
del p1
del p2
# print(p2)
# print(sys.getrefcount(p1))
# #
把物件放入列表中,也會造成計數
+1# list1 = [p1]
# print(sys.getrefcount(p1))
# #
建立物件
# p3 = people()
# # 給p3
新增obj
屬性,屬性值是乙個
p1物件 也會計數
+1# p3.obj = p1
# print(sys.getrefcount(p1))
# 當引用被刪除的時候,引用計數
-1# del p2
# print(sys.getrefcount(p1))
## #
從列表中移除 引用計數
-1# del list1[0]
# print(sys.getrefcount(p1))
## #
刪除物件屬性
# del p3.obj
# print(sys.getrefcount(p1))
# #
刪除建立時的引用計數,
p1物件會被從記憶體中移除
## del p1
# #
刪除之後,物件不可用
# print(sys.getrefcount(p1))
# 刪除物件
class man(object):
# 當物件被建立的時候,回去執行初始化函式
def
__init__(self):
print('man
類的物件被建立了
') def eat(self):
print('
執行了man
類的eat
函式...')
# 當物件被刪除
(清除記憶體
)的時候,會執行
del函式
def
__del__(self):
# 可以在物件被刪除時,新增一些功能:例如,儲存資料
.....
print('man
類的物件被清除了
')m = man()
m.eat()
m1 = m
# 手動刪除物件 引用計數
-1del m
m1.eat()
# 手動刪除物件 應用計數
-1 為0
物件被清除
del m1
Python中的記憶體管理機制
python引用了乙個記憶體池 memory pool 機制,即pymalloc機制,用於管理對小塊記憶體的申請和釋放 python和其他高階語言一樣,會進行自動的記憶體管理。它使用引用計數機制檢測為物件分配的記憶體是否可以被釋放。然後,在python中記憶體永遠不會返還給作業系統,python會持...
Python的記憶體管理
最近在學deeplearning相關的內容,找到了deeplearning.net這個 上面的tutorial主要是介紹深度學習演算法,上面的實現是用python語言,用到的庫主要有numpy和theano。numpy大家比較熟悉了,不再細說 theano是乙個進行數學計算的庫,使用者可以更好的定義...
Python的記憶體管理
首先 記憶體管理在wiki上的定義為 記憶體管理是應用於計算機記憶體的一種資源管理形式。記憶體管理的基本要求是提供一種方法,可根據它們的請求為程式動態分配記憶體的一部分,並在不再需要時將其釋放以供重用。那麼,簡單的理解的話,記憶體管理就是控制記憶體的釋放和記憶體的分配 在看完了python官方文件後...