python 元祖无法嵌套问题

本人最近学习Python, 遇到了一些关于元祖和列表的问题, 如下:

Python版本为3.6

代码如下:

[1, 2] + [[3]] # -> [1, 2, [3]]

(1, 2) + ((3),) # (1, 2, 3), 为什么不是 (1, 2, (3))?
# 同理自己尝试了一下, 貌似会自动转换为一维元组
(1, 2, (((3)))) # -> (1, 2, 3)

(1, 2) + (3, ) # -> (1, 2, 3)

有两个问题

  1. 为什么元组还可以进行加法. 本人了解到元祖为不可变对象, 那为什么还可以进行加法?
  2. 为什么无法嵌套元祖. 如上面例子展示, 所有的结果都被转换为了"一维"元组, 不是很明白其中的原理?

望能有前辈解答, 不胜感激!

阅读 2.8k
1 个回答

先给你的问题描述赞一个


  1. 先举个例子:整数、字符串也是不可变,为什么可以进行加法呢?实际上在 python 中 2 个对象能不能相加只取决于对象的 __add__ 方法,只要实现了该方法,就能相加
  2. 并不是不能,而是因为你在加号后面的元组是错的。因为元组字面量比较特殊,要使用 () 来声明,而在元组只有一个元素的时候,就和 python 语法中括号的用法产生了语义歧义,所以 python 规定,元组只有一个元素的时候,必须在元素后加一个逗号来表明这是一个元组,而不是用括号包裹的表达式。你的第二个表达式 (1, 2) + ((3),) 应该写成 (1, 2) + ((3,),)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题