2012-03-15 1 views

ответ

24

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

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

Их значения хэша могут измениться? А? – wim

+2

wim -> hash vaules меняется при изменении списка. Список может измениться, если в списке есть ссылка в другом месте. –

+0

список не поддается вызову. – wim

1

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^