上遍文章提到元组的必要性,元组是不可变的(immutable),即创建后不能修改。也就是说,一旦创建了一个元组,就无法添加、删除或修改其中的元素。

但如果非要修改它,会有什么后果?

t = (1,2,3,4,5)
l = list(t)		#把元组转换成列表
print(l)			#输出[1,2,3,4,5]
l[2]=6				#把列表下标为2的位置的元素改为6
print(l)			#输出[1,2,6,4,5]
t=tuple(l)		#将修改后的列表转换成元组
print(t)			#输出(1,2,6,4,5)

示例一

t = (1,2,3,4,5)
print(t)  	#输出(1,2,3,4,5)
t = (1,2,6,4,5)
print(t)  	#输出(1,2,6,4,5)

示例二

在示例一中,将元组转换成列表,对列表进行修改,之后再将列表转换成元组,并赋值到该元组中

在示例二中,则是直接对元组t重新赋值,两种方式本质都是一样的,都可以改变元组的值,但不是说元组不可修改吗?

其实元组确实没有被修改,重复对元组赋值并不会修改元组本身,当你对一个元组进行赋值时,实际上是创建了一个新的元组对象,并把原元组的变量名分配给新的元组。原始的元组对象仍然保持不可变,任何修改都无法直接影响到它,换句话说,这种情况下的“修改”并不是指在原始的元组对象上进行直接的修改,而是通过创建新的元组对象来达到类似修改的效果;不过这样一来,元组的不可修改性好像就失去意义了?

还有一个问题,通过重复对同一个元组进行赋值操作,实际上是创建了新的元组对象并将其分配给相同的变量名。此时,原始的元组对象再也无法直接访问,并且其所占用的内存空间也无法释放。这就意味着,如果每次对元组进行赋值,都重新占用新的内存空间(直到被垃圾回收机制回收),如果次数多了,岂不是会浪费掉大量的内存?这反而是元组的一个缺点?