在Python中,不可变(immutable)数据类型是指一旦创建后,其内容不能被修改的数据类型
在Python中不可变immutable数据类型是指一旦创建后其内容不能被修改的数据类型。A.list可变mutable可以添加、删除、修改元素B.dict可变键值对可以增删改C.set可变元素可以添加或移除D.tuple✅ 不可变创建后不能修改其元素包括增、删、改若包含可变对象如列表该对象自身可变但tuple的引用不可变。因此正确答案是D. tuple# 示例验证t(1,2,3)# t[0] 99 # ❌ TypeError: tuple object does not support item assignment# t.append(4) # ❌ AttributeError: tuple object has no attribute append# 对比 listl[1,2,3]l[0]99# ✅ 允许l.append(4)# ✅ 允许是的即使元组中包含一个列表整个元组本身仍然被视为不可变类型。✅ 原因“不可变”指的是元组对象自身的结构和元素引用不可更改——即不能增删元素、不能对元组索引赋值、不能调用修改方法如append()。但若元组中某个元素本身是可变对象如list、dict、set该嵌套对象的内容仍可被原地修改因为元组只保存对其的引用不控制其内部状态。⚠️ 注意这不违背元组的不可变性因为元组并未“改变自身引用”只是它所引用的可变对象发生了变化。 示例说明t(1,[2,3],hello)print(t)# (1, [2, 3], hello)# ✅ 允许修改嵌套列表的内容列表自身可变t[1].append(4)print(t)# (1, [2, 3, 4], hello) —— 元组内容看似变了但元组对象未被“重新赋值”或“结构调整”# ❌ 禁止试图替换元组中的元素# t[1] [5, 6] # TypeError: tuple object does not support item assignment# ❌ 禁止试图给元组添加元素# t (99,) # 这会创建新元组原元组不变原t对象地址已变若重新赋值# 验证身份idoriginal_idid(t)tt(99,)# 创建新元组 → 新idprint(id(t)original_id)# False → 原元组未被修改只是变量指向了新对象 关键结论元组的不可变性是浅层的shallow immutability仅保证其直接元素的引用不可变不保证嵌套可变对象的深层内容不可变正因如此含可变对象的元组不能作为字典的键除非该元组在生命周期内其嵌套可变对象未被修改但Python不检查运行时内容故仍会报错d{}# d[t] value # ❌ TypeError: unhashable type: list —— 因为t含list整体不可哈希