为什么可以通过串联为元组分配新值?

以下面的代码为例:


t=(1,2,3)

t+=(4,)

print(t)

打印的值是 (1,2,3,4)。元组 t 的值不是刚刚改变了,这类似于列表对象的追加/扩展方法吗?


慕田峪9158850
浏览 159回答 3
3回答

浮云间

您可以将元组连接成一个新的元组。您正在用t新值完全替换 的值。您不能修改现有元组。为了显示:t = (1, 2, 3)u = tt += (4,)  # shorthand for t = t + (4,)t == u  # Falset is u  # Falset并且u不再引用同一个对象。对于可变数据结构,情况并非如此:t = [1, 2, 3]u = tt.append(4)t == u  # Truet is u  # True

蛊毒传说

元组是不可变的。也就是说,它们不能像 Python 中的列表那样进行更改。你正在做的是,只是用新元组替换旧元组。

翻过高山走不出你

t += (4,)或多或少是语法糖。它翻译成t = t.__iadd__((4,))(假设此方法存在。如果不存在,则回退到t = t + (4,))。由于元组是不可变的,充其量__iadd__会返回一个绑定到旧名称的新元组t。对于类似设置中的列表,返回的列表将是(变异的)原始列表。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python