为什么元组在Python中不可变?

时间:2012-03-15 06:13:57

标签: python tuples immutability mutable

  

可能重复:
  Why are python strings and tuples are made immutable?

哪种低级设计使元组在Python中不可变?为什么这个功能有用?

2 个答案:

答案 0 :(得分:25)

有几个原因:

  • 像列表这样的可变对象不能用作Python中的字典键或集合成员,因为它们不是hashable。如果列表根据其内容提供了__hash__个方法,则返回的值可能会随着内容的更改而更改,这会违反哈希值的合同。
  • 如果Python只有可变序列,接受序列的构造函数通常需要复制它们以确保序列不能被其他代码修改。构造函数可以通过仅接受元组来避免防御性复制。更好的是,他们可以通过tuple方法传递序列参数,该方法仅在必要时才会复制。

答案 1 :(得分:1)

因为否则就不会有不可变的序列类型!如果你想要一个可变元组,你只需要使用一个列表。

在适当的时候使用不可变类型具有各种性能优势,如果它们是可变的,您就不能轻易地使用带有元组键的dict