python修改元组的值

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

你可能感兴趣的:(python)