這章我們學(xué)習(xí)一個(gè)新的數(shù)據(jù)類型,元組類型。簡單來說,元組就是一個(gè)不可變的列表,言外之意就是元組可以和列表一樣,按索引進(jìn)行取值,但是不能對(duì)元組進(jìn)行修改。
定義元組的方法也很簡單,和列表相似,只是定義列表需要中括號(hào),元組只需要小括號(hào),然后用逗號(hào)分隔開多個(gè)任意類型的值。
元組里面可以放多個(gè)任意類型的值,就說明整型。浮點(diǎn)型、字符串都可以放里面,還可以在里面嵌套字典,字符串,甚至可以嵌套元組。現(xiàn)在直接打印一下它和它的type。
t = (1, 1.2, 'ccc', [4, 5, 6], {'a': 1, 'b': 2, 'c': 3}, (7, 8, 9))
print(type(t))
結(jié)果類型就是tuple,這也說明了我們定義元組的時(shí)候,它背后其實(shí)調(diào)用的是tuple加括號(hào)這個(gè)方法,來幫我們創(chuàng)建這個(gè)元組的。
但是這里你需要注意一個(gè)問題,由于定義元組使用小括號(hào)定義的,小括號(hào)在Python里面太特殊了,不管是調(diào)用python里的各種功能,還是做數(shù)學(xué)運(yùn)算和邏輯運(yùn)算的時(shí)候都會(huì)用到小括號(hào)。
我定義一個(gè)元組,然后里面只有一個(gè)值,再打印類型。
a = (88)
print(type(a))
結(jié)果打印出來的類型是int類型,不是tuple類型。這就是小括號(hào)的特殊之處,它有包含的意思。所以當(dāng)我們定義一個(gè)元組,而它只有一個(gè)元素的時(shí)候,需要在最后加上逗號(hào)。
還是上面的代碼,我們加上逗號(hào)打印看看。
a = (88,)
print(type(a))
結(jié)果類型就變成元組類型了。
剛剛我們說了,元組是不可變類型,就是說我們不能修改元組里的元素。
我現(xiàn)在重新定義一個(gè)元組。
x = (33, 'f', 2.4)
根據(jù)我們前面學(xué)的知識(shí),我們應(yīng)該知道列表和字典這些容器類型里面都不是直接存的值,而是存的值的內(nèi)存地址。
對(duì)于咱們學(xué)的元組來說,它也是容器類型,而它存值的費(fèi)那事也是和列表字典一樣,存的是內(nèi)存地址。
也就是說對(duì)這個(gè)元組來說:
0號(hào)索引對(duì)應(yīng)33的內(nèi)存地址–》指向了對(duì)應(yīng)的值33;
1號(hào)索引對(duì)應(yīng)f的內(nèi)存地址–》指向了對(duì)應(yīng)的值f;
2號(hào)索引對(duì)應(yīng)2.4的內(nèi)存地址–》指向了對(duì)應(yīng)的值2.4。
這是我們前面學(xué)過的,理解起來沒問題吧?
剛剛我們說的元組不可變其實(shí)就是指得是里面的內(nèi)存地址不可變,一旦我們定義好了這個(gè)元組,那么它里面存的這些內(nèi)存地址就不能發(fā)生變化了。
換而言之就是只要元組里存的內(nèi)存地址不變,那就意味著這個(gè)元組沒有發(fā)生任何變化。
未經(jīng)允許不得轉(zhuǎn)載:445IT之家 » Python 元組類型1