2012-02-19 134 views
1
之間

可能重複:
What's the difference between list and tuples in Python?的Python:差異與similiarities元組和列表

Ive得到只是理論上的問題: 如果我說的元組僅僅是不可改變的名單,我怎麼錯了(或者我不是?)?我知道元組只有一些級別是不可變的:如果我有一個帶有可變對象的元組(列表,python對象,無論) - 它在某種程度上是可變的,因爲我可以改變對象的值,但是仍然是元組結構,它指向元素的指針保持不變,所以元組本身是不可變的。我知道,你不必解釋這一點。

據我所知,除了可變性 - 沒有區別。對於這兩種類型,operator +都返回由操作數元素組成的適當結構,爲了使+ =操作符能夠很好地工作,兩者都可以用簡單索引訪問,或者使用切片訪問,兩者都響應len(),map()(這是有點棘手:map(foo,tuple)返回列表,而不是元組,我想我得到這種行爲的原因,但仍然值得一提),all(),any()等...

So - 相同的功能,有點不同的語法,可變性的主要區別。是對的嗎?或者我錯過了什麼?

回答

1

列表和元組之間的傳統差異一直是元組是爲了用於異構數據固定長度,而列表則針對可變長度的同質數據。

近年來這種區分已經放寬。例如元組得到了僅對於同類數據有意義的count()index()方法,並且isinstance(tuple, collections.Sequence)True

所以在我看來,將元組想象成不可變列表並不算太離譜。不變性允許它們是可散列的,所以它們可以用作字典和集合中的關鍵字,因爲所有項目都是可散列的,但是它們不能被改變。

+2

我會說,它*使*他們是可哈希的,因爲如果他們的任何元素是不可及的,他們是不可干擾的。 – 2012-02-19 18:38:33