#元组
"""
1.python的内置数据结构之一,是一个不可变序列
2.不可变序列与可变序列
不可变序列:字符串、元组,没有增删改的操作
可变序列:列表、字典,可以对序列进行增删改操作,对象地址不发生变更
3.元组的创建方式
3.1直接小括号 t=('python',90,'hello')
3.2使用内置函数tuple() t=tuple(('python','hello',90))
3.3只包含一个元组的元素需要使用逗号和小括号 t=(10,)
"""
#可变序列,列表、字典
lst=[10,20,30]
print(id(lst))#2338042688960
lst.append(100)
print(id(lst))#2338042688960
#不可变序列,字符串、元组
s='hello'
print(id(s))#1536681186928
s=s+'world'
print(id(s))#1536682693232
print('第一种创建方式,使用()')
t=('python','world',98)
print(t)
print(type(t))
print('第一种创建方式中不使用括号')
t='python','world',98
print(t)
print(type(t))
print('如果元组中只有一个元素,逗号不能省略')
t=('python',)
print(t,type(t))
print('第二种创建方式,使用内置函数tuple')
t=tuple(('python','world',98))
print(t)
print(type(t))
lts=[]
lst1=list()
d={}
d1=dict()
t=()
t1=tuple()
print('空列表',lts,lst1)
print('空字典',d,d1)
print('空元组',t,t1)
"""
为什么要将元组设置为不可变序列:
多任务环境下,同时操作对象不需要加锁,在程序中尽量使用不可变序列
注意事项:元组中存储的是对象的引用,
1.1如果元组中对象本身不可变对象,则不能再引用其他对象
1.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]))#[20, 30] <class 'list'> 2269113169792
print(t[2],type(t[1]),id(t[2]))
#尝试将100加入列表当中
#由于[20,30]为列表,列表是可变序列,所以可以向列表中添加元素,列表的内存地址不变
t[1].append(100)
print(t,id(t[1]))#(10, [20, 30, 100], 40) 2269113169792
#元组的遍历
"""
元组是可迭代对象,可以用for...in进行遍历
t=tuple(('python','world',98))
for item in t:
print(item)
"""
t=('python','world',90)
print('第一种获取元组的方式,使用索引')
print(t[0])
print(t[1])
print(t[2])
print('第二种获取元组的方式,遍历')
for item in t:
print(item)