"""
元组:把多个元素组合在一起就是元组,与列表类似
最常见的元组就是坐标
"""
# 定义元组
t = ('fqx', '男', 22, True)
print(t) # ('fqx', '男', 22, True)
# 获取元组中的元素
print(t[0]) # fqx
print(t[3]) # True
# 遍历元组的值
for i in t:
print(i, end=' ') # fqx 男 22 True
print()
# 重新给元组赋值
# t[0] = '王大锤'
# print(t) # TypeError: 'tuple' object does not support item assignment(元组只能读,不能写)
# 真想修改怎么办?
t = ('王大锤', '男', 22, True)
print(t) # ('王大锤', '男', 22, True)
# 在这里变量t重新引用了新的元组原来元组将被垃圾回收
# 将元组转换为列表
person = list(t)
print(person) # ['王大锤', '男', 22, True]
# 列表可以修改元素的
person[0] = '王小锤子'
print(person) # ['王小锤子', '男', 22, True]
# 将列表转换为元组
fruits_list = ['apple', 'banana', 'orange']
fruits_tuple = tuple(fruits_list)
print(fruits_tuple) # ('apple', 'banana', 'orange')
# 比较列表和元组所占内存
import sys
print(sys.getsizeof(fruits_list)) # 80
print(sys.getsizeof(fruits_tuple)) # 64
为什么要使用元组?
1.元组在创建时间和占用的空间上面都优于列表。
我们可以使用sys模块的getsizeof函数来检查:
存储同样的元素的元组和列表各自占用了多少内存空间
2.元组中的元素是无法修改的
事实上我们在项目中尤其是多线程环境中可能更喜欢使用的是那些不变对象
(一方面因为对象状态不能修改,可以避免不必要的程序错误,
简单的说就是一个不变的对象要比可变的对象更加容易维护;
另一方面因为没有任何一个线程能够修改不变对象的内部状态,
一个不变对象自动就是线程安全的,这样就可以省掉处理同步化的开销。
一个不变对象可以方便的被共享访问)。
所以结论就是:
如果不需要对元素进行添加、删除、修改的时候,可以考虑使用元组,
当然如果一个方法要返回多个值,使用元组也是不错的选择。