Python元组为不可变类型,为何重新赋值空元组时不报错?
原因说明
你对元组「不可变」的特性理解有偏差,这里的不可变针对的是元组对象本身的内容,而非指向元组的变量名。
Python中变量的本质是对内存中对象的引用,赋值操作本质是修改变量的引用指向,和被引用对象本身是不是不可变类型没有关系:
- 第一行
tup=(1,2,3,4):在内存中创建内容为1,2,3,4的元组实例,让变量tup指向这个实例。 - 第二行
tup=():在内存中新建一个空元组实例,把变量tup的引用指向从原来的四元素元组,改成这个新的空元组。
整个过程没有对最初创建的四元素元组做任何内容修改,完全符合元组不可变的规则,自然不会抛出错误。
如果你的操作是直接修改已创建元组的内部元素,才会触发不可变类型的报错,比如:
tup = (1,2,3,4) tup[0] = 9 # 尝试修改元组内的元素,执行后会抛出TypeError: 'tuple' object does not support item assignment
这个逻辑对Python所有不可变类型都生效:比如整数、字符串都是不可变类型,你写
a = 1; a = 2或者s = "abc"; s = "def"都不会报错,本质都是修改变量的引用指向,没有修改原来的整数、字符串对象本身。
内容的提问来源于stack exchange,提问作者Sahil Panhalkar
相关产品推荐
相关产品推荐

