目录
1、什么是元组
Python内置的数据结构之一,是一个不可变序列
2、不可变序列与可变序列
(1)不变可变序:字符串、元组
不变可变序列:没有增、删,改的操作
(2)可变序列:列表、字典
可变序列:可以对序列执行增、删、改操作,对象地址不发生更改
例子:
''不可变序列 列表,字典'''
lst=[10,20,45]
print(id(lst))
lst.append(300)
print(id(lst))
print(lst)
'''不可变序列 ,字符串,元组'''
s='hello'
print(id(s))
s=s+'world'
print(id(s)) #可以发现他的内存地址是发送了更改了的
print(s)
输出结果:
3、元组的创建方式
(1)直接小括号
t=( 'Python; 'hello' ,90 )
(2)使用内置函数tuple()
t= tuple( ('Python', 'hello' , 90) )
(3)只包含一个元组的元素需要使用逗号和小括号
t=( 10,)
例子:
'''不可变序列 列表,字典'''
lst=[10,20,45]
print(id(lst))
lst.append(300)
print(id(lst))
print(lst)
'''不可变序列 ,字符串,元组'''
s='hello'
print(id(s))
s=s+'world'
print(id(s)) #可以发现他的内存地址是发送了更改了的
print(s)
'''元组的创建方式'''
'''第一种,使用()'''
t=('Python','world',98)
print(t)
print(type(t))
t2='Python','world',98
print(t2)
print(type(t2))
t3='Python'
print(t3)
print(type(t3)) #只有一个元素时要加小括号
'''第二种创建方式,使用内置函数tuple()'''
t1=tuple(('Python','world',98))
print(t1)
print(type(t1))
'''空元组的创建方式'''
'''空列表的创建方式'''
lst=[] #空列表创建的第一种方式
lst1=list() #空列表创建的第二种方式
#空字典
d1={}
d2=dict()
#空元组
t4=()
t5=tuple()
print('空列表',lst1,lst)
print('空字典',d1,d2)
print('空元组',t4,t5)
输出结果:
4、为什么要将元组设计成不可变序列
(1)在多任务环境下,同时操作对象时不需要加锁
(2)因此,在程序中尽量使用不可变序列
(3)注意事项:元组中存储的是对象的引用
①如果元组中对象本身不可对象,则不能再引用其它对象
②如果元组中的对象是可变对象,则可变对象的引用不允许改变,但数据可以改变
(4)例题:
t=(10,[20,30],40)
print(t)
print(type(t))
print(t[0],type(t[0]),id(t[0]))
print(t[1],type(t[1]),id(t[1]))
print(t[2],type(t[2]),id(t[2]))
'''尝试将t[1]修改为100'''
print(id(100))
#t[1]=100 #会报错,因为元组是不允许修改元素的
'''由于[20,30]是列表,而列表是可变的,所以向列表中添加元素,而列表的内存地址不变'''
t[1].append(100)
print(t,id(t[1]))
输出结果:
5、元组的遍历
(1)元组是可迭代对象,所以可以使用for...in进行遍历
(2)例子:
t=(10,[20,30],40)
print(t)
print(type(t))
print(t[0],type(t[0]),id(t[0]))
print(t[1],type(t[1]),id(t[1]))
print(t[2],type(t[2]),id(t[2]))
'''尝试将t[1]修改为100'''
print(id(100))
#t[1]=100 #会报错,因为元组是不允许修改元素的
'''由于[20,30]是列表,而列表是可变的,所以向列表中添加元素,而列表的内存地址不变'''
t[1].append(100)
print(t,id(t[1]))
'''元组的遍历'''
a=('Python','world',98)
print(a[0])
print(a[1])
print(a[2])
#print(a[3]) 会报错,因为超出了元组索引的范围
'''遍历元组'''
for item in a:
print(item)
输出结果: