列表(list),是一个有序且可变的容器,在里面可以存放多个不同类型的元素。
元组(tuple),是一个有序且不可变的容器,在里面可以存放多个不同类型的元素。
类型是否可变
有些对象的 值 可以改变。值可以改变的对象被称为 可变的 ;值不可以改变的对象就被称为 不可变的 。(一个不可变容器对象如果包含对可变对象的引用,当后者的值改变时,前者的值也会改变;但是该容器仍属于不可变对象,因为它所包含的对象集是不会改变的。因此,不可变并不严格等同于值不能改变,实际含义要更微妙。) 一个对象的可变性是由其类型决定的;例如,数字、字符串和元组是不可变的,而字典和列表是可变的。
1.定义
定义空元组
a = () # 语法一
a = tuple() # 语法二
定义非空元组
v1 = (11, 22, 33)
v2 = ("沐风", "ecithy")
v3 = (True, 666, "ecithy", [11, 22, 33])
# 定义非空元组,可以把两边的括号省略
v1 = 11, 22, 33
v2 = "沐风", "ecithy"
v3 = True, 666, "ecithy", [11, 22, 33]
注意:建议在元组的最后多加一个逗号,用于标识是一个元组。
v1 = (11, 22, 33,)
v2 = ("沐风", "ecithy",)
v3 = (True, 666, "ecithy", [11, 22, 33],)
为什么建议在最后加个逗号呢
v1 = (1) # 1
v2 = (1,) # (1,)
可以发现,元组内只有一个元素的时候,Python会进行优化,此时定义的不一定是元组,v1 = (1)
就相当于v1 = 1
可以发现,元组和列表非常相似,只是元组的值不能直接修改。
v1 = (11, 22, 33,)
v1[0] = 1 # TypeError: 'tuple' object does not support item assignment
但是元组的值可以间接修改。
num_list = [11, 22, 33]
v3 = (True, 666, "ecithy", num_list,)
num_list[0] = 999
print(v3) # (True, 666, 'ecithy', [999, 22, 33])
总结:
- 元组的元素的数据类型如果是不可变类型(如数字、字符串和元组),那么不能直接修改;
- 但是如果是可变类型(如字典和列表),那么可以通过修改可变类型的值来达到修改元组值的目的。
- 元组是功能更少的列表
2.操作
元组是功能更少的列表
因此,对照列表,即可