python里元组属于不可变对象,是不可修改的。元组不可变使用起来有点麻烦,但保证了数据的安全,比如我们传给一个不熟悉的方法或者数据接口,确保方法或者接口不会改变我们的数据从而导致程序问题。
那问题来了,如果我们要修改元组里的值,怎么办呢?方法还是有的。
如:将元组(1,2,3)改为(1,2,4):
定义一个元组,并查看它的类型:
>>> a = (1,2,3)
>>> a
(1, 2, 3)
>>> type(a)
可以看到,a是一个元组类型,其中的方法可以通过dir(a)看到:
>>> dir(a)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__',
'__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__',
'__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
'count', 'index']
可以看到,并没有修改、排序等操作。
要修改元组a的值,先把a转换成集合:
>>> b = list(a)
>>> b
[1, 2, 3]
转换后可以通过索引来访问及修改了:
>>> b[2] = 4
>>> b
[1, 2, 4]
可以看到,2号位置上的“3”被改为“4”了,最后把集合转为元组,传回给a就好了:
>>> a = tuple(b)
>>> a
(1, 2, 4)
但是这样会消耗一定的内存空间,查看Id可以看到a和b是两个不同的对象:
>>> id(a)
2286712091200
>>> id(b)
2286716259272