Почему кортеж не является изменяемым в Python? [дубликат]

Возможные Дубликаты:
почему строки и кортежи python становятся неизменяемыми?

какой дизайн нижнего уровня делает кортеж не изменяемым в Python? Почему это полезно?

2 ответов


несколько причин:

  • изменяемые объекты, такие как списки, не могут использоваться в качестве ключей словаря или членов набора в Python, поскольку они не hashable. Если списки были даны __hash__ методы, основанные на их содержимом, возвращаемые значения могут изменяться по мере изменения содержимого, что нарушает контракт для хэш-значений.
  • если бы Python имел только изменяемые последовательности, конструкторы, которые принимали последовательности, часто должны были бы копировать их, чтобы гарантировать, что последовательности не может быть изменен другим кодом. Конструкторы могут избежать защитного копирования, принимая только кортежи. Еще лучше, они могут передавать аргументы последовательности через tuple метод, который будет копировать только при необходимости.

потому что иначе не было бы неизменяемого типа последовательности! Если вам нужен изменяемый кортеж, вы просто используете список.

использование неизменяемых типов при необходимости имеет различные преимущества производительности, и вы не можете легко использовать dict с ключами кортежа, если они были сделаны изменяемыми.