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
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...