[Python基础] 元组数据结构

Posted by Chase Shen on 2022-01-29
Estimated Reading Time 2 Minutes
Words 809 In Total
Viewed Times

元组(Tuple)是 Python 中的一种数据结构,类似于列表,但是元组中的元素是不可变的,即元组是不可变序列。元组使用圆括号()定义,元素之间用逗号,分隔。

下面是元组的一些特点和用法:

1. 不可变性

元组中的元素是不可变的,即无法修改、添加或删除元组中的元素。
但是,元组中的元素可以是可变对象,比如列表。如果元组中包含了可变对象,那么这些可变对象的内容是可以修改的。

1
2
3
4
5
6
l2 = [3, 4, 5]
t2 = (9, 8, 7, l2)
print(t2) #输出:(9, 8, 7, [3, 4, 5])
t2[0] = 2 #直接修改元组内的元素会报错
l2[1] = 6 #可以修改元组内的可变对象
print(t2) #输出:(9, 8, 7, [3, 6, 5])

2. 定义元组

1
2
3
4
5
6
7
8
# 空元组
empty_tuple = ()

# 包含单个元素的元组,注意末尾的逗号
single_element_tuple = (5,)

# 包含多个元素的元组
my_tuple = (1, 2, 3, 'a', 'b', 'c')

3. 访问元素

可以使用索引来访问元组中的元素,索引从 0 开始。

1
2
print(my_tuple[0])  # 输出:1
print(my_tuple[3]) # 输出:'a'

4. 元组的解包(Unpacking)

可以将元组中的元素解包(unpack)到多个变量中。

1
2
x, y, z = my_tuple[:3]  # 将元组中的前三个元素解包到变量 x、y、z 中
print(x, y, z) # 输出:1 2 3

5. 不可变性的重要性

这里有一个非常值得探讨的问题,我们已经有了列表这种数据结构,为什么还需要元组这样的类型呢?

  • 元组中的元素是无法修改的,事实上我们在项目中尤其是多线程环境中可能更喜欢使用的是那些不变对象(一方面因为对象状态不能修改,所以可以避免由此引起的不必要的程序错误,简单的说就是一个不变的对象要比可变的对象更加容易维护;另一方面因为没有任何一个线程能够修改不变对象的内部状态,一个不变对象自动就是线程安全的,这样就可以省掉处理同步化的开销。一个不变对象可以方便的被共享访问)。
  • 元组也可以用作函数的返回值,因为它们不可变,可以保证返回的数据不会被意外修改。
  • 元组在创建时间和占用的空间上面都优于列表。我们可以使用sys模块的getsizeof函数来检查存储同样的元素的元组和列表各自占用了多少内存空间,这个很容易做到。

总的来说,元组是一种有用的数据结构,特别是在需要表示不可变数据集合或者需要保持数据结构不变性的情况下,如果不需要对元素进行添加、删除、修改的时候(特别是在作为字典的键或者在多线程环境中使用时),可以考虑使用元组,当然如果一个方法要返回多个值,使用元组也是不错的选择,


如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !