本節我們接着講可變數據類型和不可變數據類型:
這個系列教程建議對照着視頻學習,以下僅爲課件內容。
本節課程的視頻和實例源碼下載方式:點擊->我的主頁,查看個人簡介。
我儘量堅持每日更新一節。
前面我們的學習中其實已經涉及到可變數據類型和不可變數據類型的概念了,這一節我們總結一下。
python的數據類型分爲mutable(可變) 和 immutable (不可變):
- mutable包括list、dictionary、set
- immutable包括 number、string、bytes、tuple、frozenset
這裏的可變與不可變,指的是該對象對應內存中的那塊數據(value)是否允許改變。
如果是不可變類型數據,系統會重新分配一個對象,並將該對象的引用(可以理解爲內存地址\指針)重新賦給變量。而可變類型則可以直接修改,不會生成新的對象。
在函數傳參時,兩者也存在差別。如果入參是不可變類型,那麼是傳值方式,如果入參是可變類型,那麼傳入的是對象的引用。這裏我們要使用到函數的概念,因爲還沒有講函數,所以大家先通過下面的一個實例記住這個知識點,後面學習函數的時候我們會再次提及。
# author: Tiger, wx ID:tiger-python
# file: ./5/5_16.py
# 可變數據類型和不可變數據類型
# 函數入參區別
def incr_num(x):
x = x + 1
def pop_list(list_1=[]):
list_1.pop()
test_x = 100
test_list = [100, 200, 300]
incr_num(test_x) # 不可變類型,傳的是值
pop_list(test_list) # 可變類型,傳的是引用(地址)
print(test_x)
print(test_list)
# 不可變類型,需要return一個新的對象
def incr_num_2(x):
y = x + 1
return y
test_y = incr_num_2(test_x)
print(test_y)
通過上面實例可以看出,對於函數入參是可變類型的情況,它傳遞的是變量的值-值傳遞,函數裏面處理的變量已經是指向了一個新的對象空間,所以在函數裏面對它進行改變不會影響函數外面的變量。值傳遞的方式,需要return來返回結果。
而對於函數入參是不可變類型的情況,它傳遞的是變量指向對象空間的地址。函數裏面對這個地址進行操作,同樣會影響外部的變量。這種方式,不需要return結果。
本節課程的視頻和實例源碼下載方式:點擊->我的主頁,查看個人簡介。
我儘量堅持每日更新一節。