python 元祖无法嵌套问题

小夜勃
  • 221

本人最近学习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. 为什么无法嵌套元祖. 如上面例子展示, 所有的结果都被转换为了"一维"元组, 不是很明白其中的原理?

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

回复
阅读 1.6k
1 个回答
✓ 已被采纳

先给你的问题描述赞一个


  1. 先举个例子:整数、字符串也是不可变,为什么可以进行加法呢?实际上在 python 中 2 个对象能不能相加只取决于对象的 __add__ 方法,只要实现了该方法,就能相加
  2. 并不是不能,而是因为你在加号后面的元组是错的。因为元组字面量比较特殊,要使用 () 来声明,而在元组只有一个元素的时候,就和 python 语法中括号的用法产生了语义歧义,所以 python 规定,元组只有一个元素的时候,必须在元素后加一个逗号来表明这是一个元组,而不是用括号包裹的表达式。你的第二个表达式 (1, 2) + ((3),) 应该写成 (1, 2) + ((3,),)
宣传栏