2014-09-05 42 views
0

我正在經歷python language reference和我碰上了以下內容:能元組同時被視爲可變和不可變的基於內容

,當我們談及一個容器的可變性,只有身份直接包含 對象是隱含的。因此,如果不可變的容器(如元組)包含對可變對象的引用,那麼其值 值會更改(如果該可變對象已更改)。

我正確地認爲元組可以被認爲是基於它所包含的事物的可變和不可變的嗎?例如,如果一個元組只包含字符串,那麼它可以是不可變的,如果它至少包含一個像列表這樣的可變引用,那麼這個元組本身就是可變的。

回答

5

所有一個tuple確實是包含引用的固定列表。這些引用不能改變,所以這使得tuple不可變。被引用的對象是否可變是另一回事,但這超出了tuple的範圍,所以如果tuple引用可變對象,它可以是可變的並不準確。

1

這通常不是它的概念化的方式。元組永遠是不可變的;它包含的對象可能會或可能不會變化。同樣,如果您有一個防火盒,並且將紙張放入其中,即使紙張不存在(即整個紙盒組合可以被認爲是不防火的),該盒子仍然是防火的。

+0

隨着'some_tuple [0] .append(SOME_VALUE)'是打開包裝盒和縱火紙張的隱喻等效? – 2014-09-05 18:46:43

+0

@PeterDeGlopper:基本上,是的:-) – BrenBarn 2014-09-05 19:03:13

1

我正確地認爲元組可以是可變的和不可變的 基於它包含的東西嗎?

考慮一個事實,即元組包含一個具有固定標識符的固定大小的對象。這些對象都不能用其他對象替換。但這並不意味着對象的內容不能改變。

技術上講如果

T =(O 1 ,O- ,O- ..øÑ),其中O 到O Ñ是某些對象和通過元組T的生命週期,您不能替換這些對象中的一個或多個O i與其他一些對象O j其中我< > j。但是O 可以變異。