面試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不變的是指向,指向什么就一直是什么,不能改變
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()是工廠函數
擦,這下以后面試再問元組應該不會有問題了吧。。。。。