一、大家都知道的知识

元组(tuple)是不可以修改的,这也是它和列表最大的区别。

二、怎么修改元组?

既然元组不可修改,那为什么我们这里提到修改元组呢?其实我们谈的是伪修改,也即都是“修改后”创建了一个新元组,原元组和新元组的地址不一样。

“修改”方法一:借助可更改对象作为中介

利用list函数(或set函数、numpy.array函数...)转化成列表(或集合、数组等其他可修改对象)后再修改。

“修改”方法二:重新赋值一个新的元组。

e = (1, 2)
f = (3, 4)

print(id(e))  # 2518329767872
print(id(f))  # 2517956197824

注意,即便是赋值相同内容,两个元组的地址也是不一样的。(列表、字典等容器也是如此)

e = (1, 2)
f = (1, 2)

print(id(e))  # 2518329741824
print(id(f))  # 2518329767872

但是对于字符串变量、数值变量,赋值相同字符串、数值,两个变量其实是相同的。

g = 'bguryeidbauisfbsigvb'
h = 'bguryeidbauisfbsigvb'

print(id(g))  # 2518329751952
print(id(h))  # 2518329751952

修改方法三:利用【+】号来添加元组元素

从代码可见,添加了元组h中的元素的元组j与元组g并不相同,因为地址不一样。

g = (1,2)
h = (1,2,3)
j = g + h

print(g)  # (1,2)
print(h)  # (1,2,3)
print(j)  # (1,2,1,2,3)

print(id(g))  # 2518329751952
print(id(h))  # 2518329767232
print(id(j))  # 2517955499968

注意:对一个元组增添元素,无法使用append;但是列表、字典、数组、集合等可改容器是可以的!

g = (1,2)
g.append(3)  # AttributeError: 'tuple' object has no attribute 'append'

h = [1,2,3]
h.append(4) 
print(h)  # [1,2,3,4]

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐