为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕田峪9158850 2021-07-07 10:01:27
以下面的代码为例:t=(1,2,3)t+=(4,)print(t)打印的值是 (1,2,3,4)。元组 t 的值不是刚刚改变了,这类似于列表对象的追加/扩展方法吗?
查看完整描述

3 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

您可以将元组连接成一个新的元组。您正在用t新值完全替换 的值。您不能修改现有元组。为了显示:


t = (1, 2, 3)

u = t

t += (4,)  # shorthand for t = t + (4,)


t == u  # False

t is u  # False

t并且u不再引用同一个对象。


对于可变数据结构,情况并非如此:


t = [1, 2, 3]

u = t

t.append(4)


t == u  # True

t is u  # True


查看完整回答
反对 回复 2021-07-13
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

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


查看完整回答
反对 回复 2021-07-13
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

t += (4,)或多或少是语法糖。它翻译成

t = t.__iadd__((4,))

(假设此方法存在。如果不存在,则回退到t = t + (4,))。由于元组是不可变的,充其量__iadd__会返回一个绑定到旧名称的新元组t。对于类似设置中的列表,返回的列表将是(变异的)原始列表。


查看完整回答
反对 回复 2021-07-13
  • 3 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信