申明:本文为练习python使用,跟随GitHub上jackfrued的python-100-Days,边学边练
链接:https://github.com/jackfrued/Python-100-Days/blob/master/Day01-15/07.%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%92%8C%E5%B8%B8%E7%94%A8%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84.md
Python 的元组与列表类似,不同之处在于元组的元素不能修改,在前面的代码中我们已经不止一次使用过元组了。顾名思义,我们把多个元素组合到一起就形成了一个元组,所以它和列表一样可以保存多条数据。下面的代码演示了如何定义和使用元组。
def main():
#定义元组
information = ('杨过',100,'male','China',True)
print(information)
#获取元组中的元素
print(information[0])
#遍历元组中的值
for member in information:
print(member)
#将元组转换为列表
person = list(information)
print(person)
#列表是可以修改它的元素的
person[0]='独孤求败'
person[1]=25
print(person)
#将列表转换为元组
fruits_list = ['apple','banana','orange']
fruits_tuple =tuple(fruits_list)
print(fruits_tuple)
if __name__ == '__main__':
main()
运行结果如下:
注意:元组中的元素无法修改,比如想改变如下元组的t[0],实际会报错
def main():
t=('dog','cat','pig')
print(t)
t[0]='signal dog'
print(t)
if __name__ == '__main__':
main()
这里有一个非常值得探讨的问题,我们已经有了列表这种数据结构,为什么还需要元组这样的类型呢?
- 元组中的元素是无法修改的,事实上我们在项目中尤其是多线程环境(后面会讲到)中可能更喜欢使用的是那些不变对象(一方面因为对象状态不能修改,所以可以避免由此引起的不必要的程序错误,简单的说就是一个不变的对象要比可变的对象更加容易维护;另一方面因为没有任何一个线程能够修改不变对象的内部状态,一个不变对象自动就是线程安全的,这样就可以省掉处理同步化的开销。一个不变对象可以方便的被共享访问)。所以结论就是:如果不需要对元素进行添加、删除、修改的时候,可以考虑使用元组,当然如果一个方法要返回多个值,使用元组也是不错的选择。
- 元组在创建时间和占用的空间上面都优于列表。我们可以使用sys模块的getsizeof函数来检查存储同样的元素的元组和列表各自占用了多少内存空间,这个很容易做到。我们也可以在ipython中使用魔法指令%timeit来分析创建同样内容的元组和列表所花费的时间,如下所示
from sys import getsizeof list1=[1,2,3,4,5] print('列表占用字节:',getsizeof(list1)) tuple1=(1,2,3,4,5) print('元组占用字节:',getsizeof(tuple1))
运行结果如下: