python 元組(tuple)


面試python我想每個人都會被問一個問題,就是python中的list和tuple有什么區別?

一般情況下,我會回答,list元素可變,tuple元素不可變(書上或者其他的博客都是這么寫的),一般情況下,面試官就不會往下問了,然而。。。今天某度的面試官問我:真的不可變?是什么都不可以變么?

我當時沒反應過來,就說不可變。面試官呵呵了,又問tuple可以相加嗎,我回答:可以,但是會生產一個新的元組(這個我還回答的不錯,暗自高興一下)

然后面試官又問:可以刪除么?我其實不知道,因為我沒刪除過,不過,憑元組元素不可變這句話我就直接干脆的回答說不可以刪除,后來我查了一下,確實不可以刪除。

總結一下元組的基本注意點及用法吧

元組我們用的最多的應該是函數中傳參數,還有函數返回吧。

1.元組不可變性驗證:

      a = (1,2)

      a[0] = 2 會報錯TypeError: 'tuple' object does not support item assignment。

      a = (1,2,[1,2,3])

      a [2][1] = 0 是可以的

       說明:元組元素不可變,是元素指向的數據不可變上面的a[0] = 2報錯,是a[0]這個引用指向的2是int數據,int數據本身不可變,python中str,int,char,tuple本身就不可變,list,dict可變。

                  a[2][1]可變是因為這個引用指向的是一個list,list是可變的,所以改變時不會報錯。

       看一下摘自網上的圖:

tuple-0

 

tuple-1

所以tuple不變的是指向,指向什么就一直是什么,不能改變

2.元組的相加

 a = (1,2)    id(a):3052812140L

b = (3,4)

a = a+b      id(a):153147604   每個人測的id肯定不同,這個應該沒有異議。。。

此時a = (1,2,3,4)。不是說元組不可變么,怎么變了,其實不過是a指向一個由a和b相加的元組,不是a變了。原來那個元組沒變,也沒有了引用,坐等被當作垃圾回收。

3.元組的刪除

tup = (1,2,3,4);
del tup[0];
此時會報錯TypeError: 'tuple' object doesn't support item deletion

4.元組訪問及切片

 a = (1,2,[3,4])

a[0]指向1,a[2][1]指向4

a[:1]指向一個子元組(1,2)

5.元組操作

     cmp(tuple1, tuple2):比較兩個元組元素。
     len(tuple):計算元組元素個數。
     max(tuple):返回元組中元素最大值。
     min(tuple):返回元組中元素最小值。
     tuple(seq):將列表轉換為元組。

cmp(),len(),min(),max()都是序列的內置函數,tuple也是序列,所以可以用內置函數操作

tuple()是工廠函數

 

擦,這下以后面試再問元組應該不會有問題了吧。。。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM