請問python中的tuple是不是就是immutable list ImList ?

時間 2021-06-04 07:11:02

1樓:Ting Wang

首先tuple是沒法保證不變的

In [8]: a = ([1, 2, 3],)

In [9]: a[0][0] = 2

In [10]: a

Out[10]: ([2, 2, 3],)

如果需要immutable list 可以看 pysistence

In [15]: from pysistence import make_list

In [16]: make_list(1, make_list(2, 3))

Out[16]: PList([1, PList([2, 3])])

In [17]: pl = make_list(1, make_list(2, 3))

In [18]: pl

Out[18]: PList([1, PList([2, 3])])

In [19]: pl[0]=1

TypeErrorTraceback (most recent call last)

in ()

----> 1 pl[0]=1

TypeError: 'PList' object does not support item assignment

2樓:天象

其實基本上在靜態型別語言裡才需要操心tuple和list的區別這類的問題。你看lisp從不操心資料結構。

而且immutable list並不是真的就每操作一次就要生成乙個新拷貝了,實際上他只是在語法上immutable而已,編譯器完全可以根據資料結構型別給你優化掉。比如,你知道為啥scala的immutable list的預設::操作是加在頭部而不是尾部的嗎?

因為他真的就是連在了原來的list的頭部,而原來的list的引用還連在現在列表第二個的位置。因此,這個操作其實是O(1)的。這就是persistent collection.

(當然,你的list裡的型別也得是immutable的才行,規避了黃凱煥那個問題。)tree也可以進行類似的處理,改寫部分路徑,剩下的還連在原tree上。所以說,immutable的這些資料結構的型別不是擺著好看的,它們和mutable的那些版本一樣是對應著相應的資料結構的。

從這個意義上說,python的tuple(當然,別的語言的tuple的意思不一定一樣)就相當於乙個immutable array。如果從語法的角度來說,跟immutable list也沒什麼不同,但是確實對應著不同的資料結構。

3樓:黃凱煥

tuple是tuple!

list是list!

相對list來說,tuple的最大的區別就是元素不可變。

都是tuple的遍歷速度比list快,要不然要tuple有鳥用?

所以你可以說:tuple is similar to the immutable list..

但是不可以說:tuple is the immutable list.

發現乙個有趣的現象:

deffunc(a

):a[0

][0]=

0b=([

1,2,

3],)fun(b

)print

b結果是: ([0,2,3], )

tuple竟然改動了。

請問python中的python launcher是什麼?

python小達 有這麼一種情況,兩個檔案a.py 需要用Python2.7版本執行,b.py需要用Python3.7執行,怎麼辦?Python2.7檔案頭 python2.7 import sys print sys.version以上為檔案內容,以下為執行結果M py test.py 2.7.1...

請問怎樣在centos中安裝python3?

楊高峰 如果安裝Python 3.6的話很簡單,已包括pip yum install epel release yum install python36 MorningDeng Googel centos install python3 How To Install Python 3 and Set...

python中的beautifulsoup和xpath有什麼異同點?

我覺得不同主要有以下幾點 學習曲線 效能曲線 對新手友好度 全宇宙最好的文字標籤解析庫當然是bs了,可一遇到js還是表示很無奈,非要說x系列快點實在沒有必要哈哈哈 我怎麼覺得xpath比bs好用多了。並且也很靈活。特別新版本的lxml更強大 beautifulsoup 是 HTML 解析庫,XPat...