python 可變數據類型和不可變數據類型

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()獲取內存地址!關於內存這裏不作過多介紹,你須要記住的是:每個內存都有一個一個對應的內存地址,分配的內存在程序結束時由系統自動回收!

six

 

二.可變數據類型和不可變數據類型

python數據類型分別有整數int / 浮點數float / 布爾值bool / 元組tuple / 列表list / 字典dict,這是python開發中最經常使用的數據類型!

 

1.可變數據類型和不可變數據類型區別

可變數據類型:當該數據類型對應的變量的值發生了變化時,若是它對應的內存地址不發生改變,那麼這個數據類型就是 可變數據類型。

不可變數據類型:當該數據類型對應的變量的值發生了變化時,若是它對應的內存地址發生了改變,那麼這個數據類型就是 不可變數據類型。

總結:可變數據類型更改值後,內存地址不發生改變;不可變數據類型更改值後,內存地址發生改變。

 

2.不可變數據類型

不可變數據類型:數值類型(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

************************************************************

 

3.可變數據類型

可變數據類型: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.可變數據類型更改值後,內存地址不發生改變;不可變數據類型更改值後,內存地址發生改變

 

 

猜你喜歡:

1.python字典dict

2.python列表list

3.python字典推導式

4.python列表推導式

5.python字符串/列表/元組/字典之間的相互轉換

 

轉載請註明猿說Python » python可變數據類型和不可變數據類型

相關文章
相關標籤/搜索