05-元组

本文详细介绍了Python中的元组,包括元组的特点——不可变序列,创建方法如直接用括号或内置函数`tuple`,以及如何遍历和获取元组元素。此外,还解释了为什么元组设计为不可变序列,主要原因为多任务环境下无需加锁和编程中应尽可能使用不可变序列。元组中的元素可以是可变或不可变对象,但如果是可变对象,其引用不可改变,仅数据可变。

元组

元组特点

1、元组是Python内置的数据结构之一,是不可变序列[不支持增、删、改操作]。

元组创建

直接()创建

## 使用()创建元组
tup1 = (1,2,3,4,5)
print(type(tup1)) # <class 'tuple'>
print(tup1) # (1, 2, 3, 4, 5)**加粗样式**

内置函数tuple创建

## 使用tuple()内置函数创建

tup1 = tuple([1,'a','b',2,'c',3])
print(type(tup1)) # <class 'tuple'>
print(tup1) # (1, 'a', 'b', 2, 'c', 3)

创建只有一个元素的元组

## 创建只有一个元素的元组
tup1 = (50,)
print(type(tup1)) # <class 'tuple'>
print(tup1) # (50,)

# 不加,时,创建的变量类型是元组的类型
a = (10)
print(type(a)) # <class 'int'>
print(a) # 10

元组遍历

tup1 = tuple(range(10))
print(tup1)
# 元组遍历--for in
for i in tup1:
    print(i)

# 通过元组的索引遍历
i = 0
while i < len(tup1):
    print(tup1[i])

    i+=1

元组获取

通过索引获取

元组的索引和列表的索引规则时一样的,通过索引获取元素值时,超过索引程序会报错。

tup1 = tuple(range(10))
print(tup1) # (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

## 获取第2个元素的值
print(tup1[1]) # 1

## 超出索引时代码报错
print(tup1[11]) # IndexError: tuple index out of range

index-通过元素查索引

index()–通过元素值找元组元素所在索引,且值不存在时报错,且只能返回第一个值的索引。

tup1 = tuple(range(10))
print(tup1) # (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

# index,通过元素值找元组元素值所在的索引,且值不存在时报错
print(tup1.index(9)) # 9

print(tup1.index(100)) # ValueError: tuple.index(x): x not in tuple

为什么要将元组设计成不可变序列?

1、在多任务环境下,同时操作对象时不需要加锁。[元组是不可变序列,不支持修改和新增元素的值]
2、因此,在程序中尽量使用不可变序列。

**注意:**元组中存储的是对象的引用。

  • 如果元组中对象本身不可变,则不能再引用其他对象
  • 如果元组中对象时可变对象,则可变对象的引用不允许改变,但数据可以改变。

注解: 如果元组中对象本身不可变,则不能再引用其他对象。

tup1 = tuple(range(1,10))
print(tup1) # (1, 2, 3, 4, 5, 6, 7, 8, 9)

# 元素值3,3为整型,整型为不可变对象,所以不能修改3这个值,即使元素值是可变对象,也不允许修改。
tup1[2] = 99
print(tup1) #TypeError: 'tuple' object does not support item assignment

注解:如果元组中对象时可变对象,则可变对象的引用不允许改变,但数据可以改变。

tup1 = (99,200,[34,67,89,23],89,34)
print(tup1) # (99, 200, [34, 67, 89, 23], 89, 34)

# tup1元组第3个值为列表,列表为可变对象,但是依然无法给第3个值重新赋值,会报错。
# tup1[2] = [34,23,56] # TypeError: 'tuple' object does not support item assignment

# 因为列表是可变对象,可以修改列表中的值,比如往列表中增加元素值hello
tup1[2].append('hello')
print(tup1) # (99, 200, [34, 67, 89, 23, 'hello'], 89, 34)
## 为啥修改列表中元素就行,而修改元组的值就不行?
## 因为元组中存储的是对象的引用,即内存地址,只要元组中元素的内存地址不改变,可变对象进行增、删、该都可以。

print("列表中新增元素前,值的内存地址:",id(tup1[2])) # 1765916959304
tup1[2].append('world')
print("列表中新增元素后,值的内存地址:",id(tup1[2])) # 1765916959304
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值