您好,登錄后才能下訂單哦!
python數(shù)據(jù)類型分別有整數(shù)int / 浮點數(shù)float / 布爾值bool / 元組tuple / 列表list / 字典dict,其中數(shù)據(jù)類型分為兩個大類,一種是可變數(shù)據(jù)類型;一種是不可變數(shù)據(jù)類型,兩者有什么區(qū)別呢?
?
?
在講解python可變數(shù)據(jù)類型和不可變數(shù)據(jù)類型之前需要先普及一下內存相關的簡單知識!
在python編程的時候,代碼中的變量實際上都是存儲在計算機內存中,當然這里指的內存在計算機中是虛擬的,你看不見摸不著!每一個內存都有一個對應的內存地址,講到這里需要再次介紹一個python內置函數(shù)id(),該函數(shù)可以用于獲取內存地址!獲取內存地址方法如下:
1 2 3 4 5 6 | if __name__ == "__main__": ? ????a = 10 ????b = 20 ????print("a的數(shù)據(jù)類型是:{} 地址:{}".format(type(a),id(a))) ????print("b的數(shù)據(jù)類型是:{} 地址:{}".format(type(b), id(b))) |
輸出結果:
1 2 | a的數(shù)據(jù)類型是:<class 'int'> 地址:1994744256 b的數(shù)據(jù)類型是:<class 'int'> 地址:1994744576 |
分析下上面代碼:定義了局部變量a和b,python會自動給局部變量分配內存,分別用來存放整數(shù)10和20,并通過內置函數(shù)id()獲取內存地址!關于內存這里不做過多介紹,你需要記住的是:每一個內存都有一個一個對應的內存地址,分配的內存在程序結束時由系統(tǒng)自動回收!
?
python數(shù)據(jù)類型分別有整數(shù)int / 浮點數(shù)float / 布爾值bool / 元組tuple / 列表list / 字典dict,這是python開發(fā)中最常用的數(shù)據(jù)類型!
?
可變數(shù)據(jù)類型:當該數(shù)據(jù)類型對應的變量的值發(fā)生了變化時,如果它對應的內存地址不發(fā)生改變,那么這個數(shù)據(jù)類型就是 可變數(shù)據(jù)類型。
不可變數(shù)據(jù)類型:當該數(shù)據(jù)類型對應的變量的值發(fā)生了變化時,如果它對應的內存地址發(fā)生了改變,那么這個數(shù)據(jù)類型就是 不可變數(shù)據(jù)類型。
總結:可變數(shù)據(jù)類型更改值后,內存地址不發(fā)生改變;不可變數(shù)據(jù)類型更改值后,內存地址發(fā)生改變。
?
不可變數(shù)據(jù)類型:數(shù)值類型(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) ? #浮點數(shù)變量 a = 10.5 print("浮點數(shù)變量a修改之前地址:{}".format(id(a))) a = 20.2 print("浮點數(shù)變量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) ? #元組的數(shù)據(jù)不能修改,否則會報錯 |
輸出結果:
1 2 3 4 5 6 7 8 9 10 11 12 | 整形變量a修改之前地址:1994744256 整形變量a修改之后地址:1994744576 ************************************************************ 浮點數(shù)變量a修改之前地址:2713286559088 浮點數(shù)變量a修改之后地址:2713286559136 ************************************************************ 字符串變量a修改之前地址:2713269294224 字符串變量a修改之后地址:2713269272112 ************************************************************ 布爾值a修改之前地址:1994252480 布爾值a修改之后地址:1994252448 ************************************************************ |
?
可變數(shù)據(jù)類型: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(
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。 |