请问python中的tuple是不是就是immutable list(ImList)

如果从字面理解immutable list,那么就是了,因为Python tuple的内容是不能增、删、改的。
■网友
tuple是tuple!list是list!相对list来说,tuple的最大的区别就是元素不可变。都是tuple的遍历速度比list快,要不然要tuple有鸟用?所以你可以说:tuple is similar to the immutable list..但是不可以说:tuple is the immutable list.发现一个有趣的现象:def func(a): a = 0b = (, )fun(b)print b结果是: (, )tuple竟然改动了。
■网友
首先tuple是没法保证不变的In : a = (,)In : a = 2In : aOut: (,)如果需要immutable list 可以看 pysistenceIn : from pysistence import make_listIn : make_list(1, make_list(2, 3))Out: PList()])In : pl = make_list(1, make_list(2, 3))In : plOut: PList()])In : pl=1---------------------------------------------------------------------------TypeError Traceback (most recent call last)\u0026lt;ipython-input-19-3649688295f8\u0026gt; in \u0026lt;module\u0026gt;()----\u0026gt; 1 pl=1TypeError: \u0026#39;PList\u0026#39; object does not support item assignment
■网友
其实基本上在静态类型语言里才需要操心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也没什么不同,但是确实对应着不同的数据结构。


    推荐阅读