0%

Python中tuple类型

创建tuple
1
2
3
t = ('Adam', 'Lisa', 'Bart') #使用()创建
t = tuple(('Adam', 'Lisa', 'Bart'))
t = 'Adam', 'Lisa', 'Bart' # 'A', 'B' 不论是否用小括号包括,本身就是元组类型

创建tuple和创建list唯一不同之处是用( )替代了[ ]
创建后元组t就不能改变了,不能向tuple中删除和添加元素

获取tuple元素的方式和list是一样的,可以使用t[0],t[-1]等索引方式访问元素,但是不能赋值成别的元素,否则就会报错:

1
2
3
4
t[0] = 'Paul'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

tuple和list一样,可以包含0个、1个和任意多个元素。

1
2
3
4
5
6
7
# 包含0个元素的tuple,也就是空tuple
t = ()
print(t) # ()

#包含一个元素的tuple
t = (1)
print(t) # 1

上述包含一个元素1的元组输出内容为整数1,不是元组类型(1)。因为()既可以表示tuple,又可以作为括号表示运算时的优先级,结果(1)被Python解释器计算出结果1,导致我们得到的不是tuple,而是整数1。
正是因为用()定义单元素的tuple有歧义,所以Python规定,单元素tuple要多加一个逗号“,”,这样就避免了歧义:

1
2
3
4
t = (1,)
print(t) # (1,)
t = (1, 2, 3,)
print(t) # (1, 2, 3)

Python在打印单元素tuple时,也自动添加了一个“,”,为了更明确地表明这是一个tuple。多元素tuple加不加这个额外的“,”效果是一样的。

“可变”的tuple
1
2
t = ('a', 'b', ['A', 'B'])
L = t[2]

注意到t有3个元素:'a','b'和一个list:['A', 'B']。list作为一个整体是tuple的第3个元素,可以通过t[2]拿到。
修改list的两个元素,再看tuple的内容:

1
2
3
L[0] = 'X'
L[1] = 'Y'
print(t) # ('a', 'b', ['X', 'Y'])

不是说tuple一旦定义后就不可变了吗?怎么现在又变了?
定义的时候tuple包含的3个元素:

当把list的元素’A’和’B’修改为’X’和’Y’后,tuple变为:

表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但这里指向的list本身可变导致tuple“可变”。所以要创建一个内容不变的tuple必须保证tuple的每一个元素本身也不能变。

天生我材必有用,千金散尽还复来~
  • 本文作者: XTLei
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
-------------本文结束感谢您的阅读-------------