您好,登錄后才能下訂單哦!
這篇文章主要講解了“python的可變和不可變數(shù)據(jù)類型是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“python的可變和不可變數(shù)據(jù)類型是什么”吧!
python中不可變數(shù)據(jù)類型的定義為:當(dāng)該數(shù)據(jù)類型的對應(yīng)變量的值發(fā)生了改變,那么它對應(yīng)的內(nèi)存地址也會發(fā)生改變,就稱不可變數(shù)據(jù)類型,包括:int
(整型)、string
(字符串)、tuple
(元組)
首先我們來看一下整型為什么是不可變數(shù)據(jù)類型。給一個變量x
賦值,然后改變這個x的值,輸出前后兩次的內(nèi)存地址id和數(shù)據(jù)類型type
id()
:獲取對象的內(nèi)存地址
type()
:當(dāng)只有一個參數(shù)的時候,返回對象的類型。當(dāng)有三個參數(shù)的時候返回一個類對象。
# 賦值 x = 1 # 打印x的內(nèi)存地址和數(shù)據(jù)類型 print(id(x), type(x)) # 輸出:8791164511056 <class 'int'> # 改變x的值 x = 2 # 打印改變后的x的內(nèi)存地址和數(shù)據(jù)類型 print(id(x), type(x)) # 輸出:8791164511088 <class 'int'>
從上面的代碼我們可以得出,變量x為整型,且當(dāng)x的值發(fā)生改變的時候,變量的內(nèi)存地址也發(fā)生了改變。所以整型是不可變的數(shù)據(jù)類型。
根據(jù)上面的實例,我們把變量x的值換成字符串試試,看能不能得出字符串是不可變數(shù)據(jù)類型的結(jié)論呢~
# 賦值 x = 'abcdefg' # 打印x的內(nèi)存地址和數(shù)據(jù)類型 print(id(x), type(x)) # 輸出:30828000 <class 'str'> # 改變x的值 x = 'higklmn' # 打印改變后的x的內(nèi)存地址和數(shù)據(jù)類型 print(id(x), type(x)) # 輸出:30828168 <class 'str'>
代碼中當(dāng)變量改變時,變量的內(nèi)存地址由30828000 變?yōu)榱?0828168 。所以字符串是不可變數(shù)據(jù)類型。
元組被稱為只讀列表,即數(shù)據(jù)可以被查詢,但不能被修改。如果我們強行修改元組中的數(shù)據(jù),會報錯。
t = (1, 2, 3, 4, 5) # 修改元組的值 t[1] = 100 會報錯:TypeError: 'tuple' object does not support item assignment
python中對可變數(shù)據(jù)類型的定義為:當(dāng)該數(shù)據(jù)類型的對應(yīng)變量的值發(fā)生了改變,那么它對應(yīng)的內(nèi)存地址不發(fā)生改變,就稱可變數(shù)據(jù)類型。包括:set(集合)、list(列表)、dict(字典)
我們先來看一下集合,定義一個集合set1,改變set1的值,且輸出兩次的內(nèi)存地址
set1 = {1, 2, 3, '123'} print("集合:", set1, "內(nèi)存地址:", id(set1), "\t", "數(shù)據(jù)類型:", type(set1), "\t") # 輸出:集合: {1, 2, 3, '123'} 內(nèi)存地址: 41388296 數(shù)據(jù)類型: <class 'set'> # 給set1添加一個元素 set1.add(100) print("集合:", set1, "內(nèi)存地址:", id(set1), "\t", "數(shù)據(jù)類型:", type(set1), "\t") # 輸出:集合: {1, 2, 3, 100, '123'} 內(nèi)存地址: 41388296 數(shù)據(jù)類型: <class 'set'>
從上面代碼我們可以看出,即使一個集合發(fā)生了改變,這個集合的內(nèi)存地址是不變的。所以集合是可變數(shù)據(jù)類型。
list1 = [1, 2, 3, 4, 5] print("列表:", list1, "內(nèi)存地址:", id(list1), "\t", "數(shù)據(jù)類型:", type(list1), "\t") # 輸出:列表: [1, 2, 3, 4, 5] 內(nèi)存地址: 1860168 數(shù)據(jù)類型: <class 'list'> list1[0] = 100 print("列表:", list1, "內(nèi)存地址:", id(list1), "\t", "數(shù)據(jù)類型:", type(list1), "\t") # 輸出:列表: [100, 2, 3, 4, 5] 內(nèi)存地址: 1860168 數(shù)據(jù)類型: <class 'list'>
當(dāng)列表中的值發(fā)生了改變時,內(nèi)存地址依舊不變,所以列表是可變數(shù)據(jù)類型。
字典是python中唯一的映射類型,采用鍵值對(key-value)的形式存儲數(shù)據(jù)。字典中的key值必須是可哈希的數(shù)據(jù)類型,也就是整型,字符串,元組等。
dict1 = {'name': 'kkk', 'age': 18} print("字典:", dict1, "內(nèi)存地址:", id(dict1), "\t", "數(shù)據(jù)類型:", type(dict1), "\t") # 字典: {'name': 'kkk', 'age': 18} 內(nèi)存地址: 31033960 數(shù)據(jù)類型: <class 'dict'> dict1['sex'] = 'man' print("字典:", dict1, "內(nèi)存地址:", id(dict1), "\t", "數(shù)據(jù)類型:", type(dict1), "\t") # 字典: {'name': 'kkk', 'age': 18, 'sex': 'man'} 內(nèi)存地址: 31033960 數(shù)據(jù)類型: <class 'dict'>
從上面代碼可以看出,當(dāng)字典中的元素發(fā)生改變時,內(nèi)存地址不變,都是31033960。所以字典是可變數(shù)據(jù)類型。
感謝各位的閱讀,以上就是“python的可變和不可變數(shù)據(jù)類型是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對python的可變和不可變數(shù)據(jù)類型是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。