python數據類型分別有整數int / 浮點數float / 布爾值bool / 元組tuple / 列表list / 字典dict,其中數據類型分爲兩個大類,一種是可變數據類型;一種是不可變數據類型,二者有什麼區別呢?python
在講解python可變數據類型和不可變數據類型以前須要先普及一下內存相關的簡單知識!git
在python編程的時候,代碼中的變量實際上都是存儲在計算機內存中,固然這裏指的內存在計算機中是虛擬的,你看不見摸不着!每個內存都有一個對應的內存地址,講到這裏須要再次介紹一個python內置函數id(),該函數能夠用於獲取內存地址!獲取內存地址方法以下:github
1編程 2微信 3app 4ide 5函數 6spa |
if __name__ == "__main__":code
a = 10 b = 20 print("a的數據類型是:{} 地址:{}".format(type(a),id(a))) print("b的數據類型是:{} 地址:{}".format(type(b), id(b))) |
輸出結果:
1 2 |
a的數據類型是:<class 'int'> 地址:1994744256 b的數據類型是:<class 'int'> 地址:1994744576 |
分析下上面代碼:定義了局部變量a和b,python會自動給局部變量分配內存,分別用來存放整數10和20,並經過內置函數id()獲取內存地址!關於內存這裏不作過多介紹,你須要記住的是:每個內存都有一個一個對應的內存地址,分配的內存在程序結束時由系統自動回收!
python數據類型分別有整數int / 浮點數float / 布爾值bool / 元組tuple / 列表list / 字典dict,這是python開發中最經常使用的數據類型!
可變數據類型:當該數據類型對應的變量的值發生了變化時,若是它對應的內存地址不發生改變,那麼這個數據類型就是 可變數據類型。
不可變數據類型:當該數據類型對應的變量的值發生了變化時,若是它對應的內存地址發生了改變,那麼這個數據類型就是 不可變數據類型。
總結:可變數據類型更改值後,內存地址不發生改變;不可變數據類型更改值後,內存地址發生改變。
不可變數據類型:數值類型(int、float、bool)、string(字符串)、tuple(元組)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:何以解憂 @Blog(我的博客地址): shuopython.com @WeChat Official Account(微信公衆號):猿說python @Github:www.github.com
@File:python_variable.py @Time:2019/10/24 21:25
@Motto:不積跬步無以致千里,不積小流無以成江海,程序人生的精彩須要堅持不懈地積累! """
#整形變量 a = 10 print("整形變量a修改以前地址:{}".format(id(a))) a = 20 print("整形變量a修改以後地址:{}".format(id(a))) print("***"*20)
#浮點數變量 a = 10.5 print("浮點數變量a修改以前地址:{}".format(id(a))) a = 20.2 print("浮點數變量a修改以後地址:{}".format(id(a))) print("***"*20)
#字符串變量 a = "hello" print("字符串變量a修改以前地址:{}".format(id(a))) a = "world" print("字符串變量a修改以後地址:{}".format(id(a))) print("***"*20)
#布爾值變量 a = False print("布爾值a修改以前地址:{}".format(id(a))) a = True print("布爾值a修改以後地址:{}".format(id(a))) print("***"*20)
#元組的數據不能修改,不然會報錯 |
輸出結果:
1 2 3 4 5 6 7 8 9 10 11 12 |
整形變量a修改以前地址:1994744256 整形變量a修改以後地址:1994744576 ************************************************************ 浮點數變量a修改以前地址:2713286559088 浮點數變量a修改以後地址:2713286559136 ************************************************************ 字符串變量a修改以前地址:2713269294224 字符串變量a修改以後地址:2713269272112 ************************************************************ 布爾值a修改以前地址:1994252480 布爾值a修改以後地址:1994252448 ************************************************************ |
可變數據類型:list(列表)、dict(字典)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#列表 a = list() print("列表a修改以前地址:{}".format(id(a))) a.append(20) print("列表a修改以後地址:{}".format(id(a))) a.append(False) print("列表a修改以後地址:{}".format(id(a))) a.append("hello") print("列表a修改以後地址:{}".format(id(a))) print("***"*20)
#字典 a = dict() print("字典a修改以前地址:{}".format(id(a))) a["name"]="zhangsan" print("字典a修改以後地址:{}".format(id(a))) a["age"]=18 print("字典a修改以後地址:{}".format(id(a))) a["sing_dog"]=True print("字典a修改以後地址:{}".format(id(a))) print("***"*20) |
輸出結果:
1 2 3 4 5 6 7 8 9 10 |
列表a修改以前地址:2067294579016 列表a修改以後地址:2067294579016 列表a修改以後地址:2067294579016 列表a修改以後地址:2067294579016 ************************************************************ 字典a修改以前地址:2067294527992 字典a修改以後地址:2067294527992 字典a修改以後地址:2067294527992 字典a修改以後地址:2067294527992 ************************************************************ |
1.不可變數據類型:數值類型(int、float、bool)、string(字符串)、tuple(元組)
2.可變數據類型:list(列表)、dict(字典)
3.可變數據類型更改值後,內存地址不發生改變;不可變數據類型更改值後,內存地址發生改變
轉載請註明:猿說Python » python可變數據類型和不可變數據類型