2012-03-15 14 views

Odpowiedz

24

Kilka powodów:

  • Zmienne obiekty, takie jak list nie może być stosowany jako klucze słownika lub ustawić członków w Pythonie, ponieważ nie są one hashable. Jeśli list dano __hash__ metody oparte na ich zawartość, wartości zwracane mogą się zmienić wraz zawartość zmianie, co narusza umowę o wartości hash. tylko
  • Jeśli Python miał zmienne sekwencje, konstruktorzy który akceptuje sekwencje często trzeba je skopiować do zapewnienia, że ​​sekwencje nie mogą być modyfikowane przez innego kodu. Konstruktorzy mogą unikać defensywnego kopiowania tylko akceptując krotki. Co więcej, mogą przekazywać argumenty sekwencji za pomocą metody tuple, która będzie kopiowana tylko wtedy, gdy będzie to konieczne.
+0

Ich wartości hash można zmienić? Huh? – wim

+2

wim -> hash vaules zmienia się po zmianie listy. Lista może się zmienić, jeśli istnieje ref w innym miejscu na liście. –

+0

lista jest nieobsługiwana. – wim

1

Bo inaczej nie byłaby niezmienna typu sekwencja! Jeśli chcesz mieć zmienną krotkę, po prostu użyj listy.

Stosowanie niezmiennych typów, o ile ma to zastosowanie, ma różne zalety wydajnościowe, a używanie kluczy krotkowych, jeśli zostało zmienione, nie mogłoby być łatwe z użyciem dict.