python基礎-可變與不可變數據類型

1. 對象語義和值語義

對象語義:python變量所需的存儲空間大小一致,因爲變量只是保存了一個引用,稱爲對象語義和指針語義。變量的每一次初始化,都開闢了一個新的空間,將新內容的地址賦值給變量

值語義:C語言把變量的值直接保存在變量的存儲區裏,這種方式被我們稱爲值語義言,採用這種存儲方式,每一個變量在內存中所佔的空間就要根據變量實際的大小而定,比如 c中 int 一般爲2個字節 而char爲一個字節

2. 可變類型與不可變類型

基於內存地址來說:
不可變數據類型: 當該數據類型的對應變量的值發生了改變,那麼它對應的內存地址也會發生改變,對於這種數據類型,就稱不可變數據類型。
可變數據類型:當該數據類型的對應變量的值發生了改變,那麼它對應的內存地址不發生改變,對於這種數據類型,就稱可變數據類型。

總結:不可變數據類型更改後地址發生改變,可變數據類型更改地址不發生改變

3. python中可變與不可變數據類型

python中的不可變數據類型:不允許變量的值發生變化,如果改變了變量的值,相當於是新建了一個對象,而對於相同的值的對象,在內存中則只有一個對象,內部會有一個引用計數來記錄有多少個變量引用這個對象;

# 不可變類型
a = 3
b = 3
r1 = id(a)
r2 = id(b)
print(r1==r2)

>>True

python中的可變數據類型:允許變量的值發生變化,即如果對變量進行append、+=等這種操作後,只是改變了變量的值,而不會新建一個對象,變量引用的對象的地址也不會變化,不過對於相同的值的不同對象,在內存中則會存在不同的對象,即每個對象都有自己的地址,相當於內存中對於同值的對象保存了多份,這裏不存在引用計數,是實實在在的對象

# 可變類型
l1 = [1,2,3]
l2 = [1,2,3]
r1 = id(l1)
r2 = id(l2)
print(r1==r2)

>>False

3.1 不可變類型

不可變可以理解爲引用的地址處的值是不能被改變的,改變了即爲引用的不是同一地址

Num類型

a = 1
r1 = id(a)
a +=1
r2 = id(a)
print(r1==r2)


>>False

string類型

b = '123'
r1 = id(b)
b +='4'
r2 = id(b)
print(r1==r2)

>>False

tuple類型

t =(1,2,3,4,5)
# del t[3] 不可修改
print(False)

>>False

3.2 可變類型

list類型

l = [1,2,3]
r1 = id(l)
l.append(4)
r2 = id(l)
print(r1==r2)

>>True

dict類型

d = {'key1':'a'}
r1 = id(d)
d['key2']='b'
r2 = id(d)
print(r1==r2)

>>True

set類型

s = {1,2,3,4,5}
r1 = id(s)
s.add(6)
r#2 =id(s)
print(r1 == r2)

>>True
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章