變量和引用
領取Python學習資料可以加小編的微信:tz2020jd
變量和資料都是儲存在記憶體中的;
在python中函數的參數傳遞以及傳回值都是引用傳遞的;
變量和資料是分開存儲的;
變量中記錄資料的位址,就叫做引用;
使用id()函數可以檢視變量中儲存的資料所在的記憶體位址;
注意: 如果變量已經被定義,當給一個變量複制的時候,本質上是修改了資料的引用。① 變量不再對之前的資料引用;②變量改為對新複制的資料引用;
可變類型和不可變類型
不可變類型: 記憶體中的資料不允許修改:
① 數字類型: int、bool、 float、complex、long
② 字元串 :str
③ 元組 :tuple
可變類型: 記憶體中的資料可以被修改
① 清單 list
② 字典 dict
可變類型:變量指派 a=5 後再指派 a=10,這裡實際是新生成一個 int 值對象 10,再讓 a 指向它,而 5 被丢棄,不是改變a的值,相當于新生成了a;
不可變類型: 變量指派 la=[1,2,3,4] 後再指派 la[2]=5 則是将 list la 的第三個元素值更改,本身la沒有動,隻是其内部的一部分值被修改了。
函數參數傳遞時注意:
不可變類型:類似 c++ 的值傳遞,如 整數、字元串、元組。如fun(a),傳遞的隻是a的值,沒有影響a對象本身。比如在 fun(a)内部修改 a 的值,隻是修改另一個複制的對象,不會影響 a 本身。
可變類型:類似 c++ 的引用傳遞,如 清單,字典。如 fun(la),則是将 la 真正的傳過去,修改後fun外部的la也會受影響;
局部變量和全局變量
局部變量:函數内部定義的變量,隻能在函數内部使用;
全局變量: 函數外部定義的變量,所有函數内部都可以使用這個變量;(不推薦使用)
注意: 在python中,不允許修改全局變量的值,如果修改,會在函數中定義一個局部變量;
num = 10
# python中,不允許修改全局變量
def method1():
num = 99 # 這裡沒有修改全局變量num,而是自己又定義了一個局部變量,執行完這個函數,局部變量就會回收
print(num)
def method2():
print(num) # 雖然在method1中修改了 num 但是卻不會修改
method1()
method2()
# 輸出
# 99
# 10
可以使用global關鍵字修改全局變量的值。
全局變量的命名規則: 前面加上g_ 或者gl_;