一、大家都知道的知识
元组(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]