这个问题在这里已有答案:
我经历了python language reference,我遇到了以下情况:
当我们谈论容器的可变性时,只隐含直接包含的对象的标识 . 因此,如果不可变容器(如元组)包含对可变对象的引用,则如果更改了可变对象,则其值会更改 .
我是否正确地认为元组可以被认为是基于它包含的东西的可变和不可变的?例如,如果一个元组只包含字符串,那么它可以是不可变的,如果它包含至少一个像列表一样的可变引用,那么元组本身就是可变的 .
这个问题在这里已有答案:
我经历了python language reference,我遇到了以下情况:
当我们谈论容器的可变性时,只隐含直接包含的对象的标识 . 因此,如果不可变容器(如元组)包含对可变对象的引用,则如果更改了可变对象,则其值会更改 .
我是否正确地认为元组可以被认为是基于它包含的东西的可变和不可变的?例如,如果一个元组只包含字符串,那么它可以是不可变的,如果它包含至少一个像列表一样的可变引用,那么元组本身就是可变的 .
3 回答
所有
tuple
都包含一个固定的引用列表 . 这些引用无法更改,因此这使得tuple
不可变 . 引用的对象是否可变是另一个故事,但这超出了tuple
的范围,因此如果引用可变对象,则tuple
可以是可变的并不准确 .这通常不是概念化的方式 . 元组总是不可变的;它包含的对象可能是也可能不是可变的 . 同样,如果您有一个防火箱,并且您在其中放入纸张,那么即使纸张没有,该箱子仍然是防火的(因此整个箱纸组合可以被认为是非防火的) .
考虑这样一个事实,即元组包含具有明确标识符的固定大小的对象 . 这些对象都不能用不同的对象替换 . 但这并不意味着对象的内容无法改变 .
从技术上讲,如果
T =(O1,O2,O3 ...... On),其中O1到On是某些对象,并且在元组
T
的生命周期内,你不能用一些其他对象Oj替换这些对象中的一个或多个Oj,其中i <> j . 但是Oi可以变异 .