引用物件
首先我們來看乙個賦值語句,
a =
10
10是乙個數值型別的物件,那麼a呢?a是乙個對10這個物件引用的變數,再定義:
b = a
此時列印b返回的也是10這個物件,b也是對10這個變數的引用;
a =10 #此時a這個變數指向10這個物件,在10這個物件中(頭部包含的資訊為物件的型別int,指向這個變數的計數為:1)
b = a #那麼此時b的引用的是a這個變數,那麼a引用的是10這個物件,b實際也是引用10這個物件,那麼此時10這個物件的計數引用為:2
1.引用計數
要保持追蹤記憶體中的物件,python使用了引用計數這一簡單的技術
引用計數的增加:
當物件被建立並(將其引用)賦值給變數時,該物件的引用計數被設定為1。
物件的引用計數增加的情況:
引用計數減少
物件引用計數減少的情況:
2.內建函式is和id
判斷是否為同一物件:
我們要檢視兩個變數是不是引用的同一物件,這個時候我們有兩種方法;
檢視變數的id(指向的記憶體位址),是否是一樣的。
通過is判斷是否為同一物件
a =
100b =
100print(id
(a))
print(id
(b))
print
(a is b)
執行結果:
499408704
499408704
true
3.可變型別資料和不可變型別
python的基本資料型別中:
那麼如何區分可變型別和不可變型別,我們可以通過id來確定資料的唯一性;
我們看一下可變型別和不可變型別資料改變資料時記憶體位址有沒有發生改變;
不可變型別:
改變資料會重新建立記憶體空間;相當於重新賦值,不是改變原本指向的物件值;
可變資料型別:
改變資料不會改變記憶體位址,會直接修改指向物件的資料;
學習筆記 41 Python實戰程式設計 按鈕
立即學習 按鈕 用於指令的提交作用,如將文字中輸入的資訊進行提交等 button tkinter.button root,text linlianqin image photo,compound bottom 建立了乙個按鈕,並且有提示文字text,還將相對於文字設定了相對位置關係,即compoun...
記憶體管理高階
dealloc是nsobject的乙個例項方法,與alloc對應,用於 開闢的記憶體空間,這個方法在物件引用計數為0是,有系統自動呼叫。通常我們在dealloc中釋放類的例項變數。dealloc的使用 void dealloc name release setter方法洩露的例項變數 super d...
高階記憶體管理程式設計指南 記憶體管理政策
協議中定義的方法和標準方法命名約定的組合提供。的nsobject類也定義了一種方法,dealloc即自動當物件被釋放呼叫。本文介紹了在 cocoa 程式中正確管理記憶體所需了解的所有基本規則,並提供了一些正確用法的示例。記憶體管理模型基於物件所有權。任何物件都可能擁有乙個或多個所有者。只要乙個物件至...