【问题标题】:Why tuple is not mutable in Python? [duplicate]为什么元组在 Python 中不可变? [复制]
【发布时间】:2012-03-15 06:13:57
【问题描述】:

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

什么底层设计使得元组在 Python 中不可变?为什么这个功能有用?

【问题讨论】:

    标签: python tuples immutability mutable


    【解决方案1】:

    几个原因:

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

    【讨论】:

    • 它们的哈希值可以改变吗?嗯?
    • wim -> 哈希值在列表更改时更改。如果列表的其他地方有引用,则列表可以更改。
    • 你能详细说明“他们(构造函数)可以将序列参数包装在仅在必要时复制的元组中”是什么意思吗?
    • 通常,tuple(..) 创建一个新的元组对象,从给定的可迭代对象(通常是一个列表)中复制每个元素。但如果参数已经是一个元组,则该元组只是被返回并且不会发生复制。
    • 集合成员只是集合中包含的对象之一。我想说的是,Python 不允许像 {[]} 这样的集合,因为 Python 的集合实现依赖于一致的散列,而像列表这样的可变对象是不可散列的。
    【解决方案2】:

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

    在适当的时候使用不可变类型具有各种性能优势,如果将它们设为可变,您将无法轻松地将 dict 与元组键一起使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-01
      • 2015-12-24
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      • 2021-02-09
      • 2013-02-19
      相关资源
      最近更新 更多