Twoim głównym problemem byłaby dyktatura i zestawy. Jeśli wstawisz obiekt do dyktatury/zestawu i zmiany hasza tego obiektu, wtedy, gdy spróbujesz pobrać ten obiekt, skończysz szukać w innym miejscu w podstawowej tablicy dict/set, a tym samym nie znajdziesz obiekt. Właśnie dlatego klucze dyktowania zawsze powinny być niezmienne.
Oto mały przykład: powiedzmy, że stawiamy o
w dict i o
„s początkowy hash to 3. Chcemy zrobić coś takiego (nieznaczne uproszczenie ale dostaje punkt w poprzek):
Hash table:
0 1 2 3 4 5 6 7
+---+---+---+---+---+---+---+---+
| | | | o | | | | |
+---+---+---+---+---+---+---+---+
^
we put o here, since it hashed to 3
Teraz powiedzmy hash z o
zmian na 6
. Jeśli chcemy odzyskać o
z dyktatu, przyjrzymy się miejscu 6
, ale nic tam nie ma! Spowoduje to fałszywy wynik negatywny podczas sprawdzania struktury danych. W rzeczywistości, każdy element powyższej tablicy może mieć "wartość" związaną z tym w przypadku dyktowania, a w jednym miejscu może być wiele elementów (na przykład hash collision). Ponadto, zwykle decydujemy o wartości modulo wartości tablicy przy podejmowaniu decyzji, gdzie umieścić element. Niezależnie od tych wszystkich szczegółów, powyższy przykład nadal dokładnie przekazuje, co może pójść nie tak, gdy zmienia się kod skrótu obiektu.
Czy może to spowodować awarię tłumacza lub uszkodzenie struktur wewnętrznych?
Nie, to się nie stanie. Kiedy mówimy, że zmiana hash obiektu jest "niebezpieczna", mamy na myśli niebezpieczną w tym sensie, że w zasadzie pokonuje ona cel hashowania i czyni kod trudnym, jeśli nie niemożliwym do uzasadnienia. Nie mówimy o niebezpieczeństwie w tym sensie, że może powodować awarie.
Taki kod nigdy nie powinien bezpośrednio "załamać się" ani "uszkodzić" czasu pracy, ale użycie dyktowania/ustawienia stanie się naprawdę problematyczne. – user2864740
Prawdopodobnie jedną z najgorszych rzeczy w twoim obiekcie "BadIdea" jest fakt, że jest on w stanie wygenerować tylko zestaw 10 000 możliwych skrótów, co znacznie zwiększa ilość (relatywnie drogich) kolizji mieszania 'dict' /' set' musi sobie poradzić. –
@ Two-BitAlchemist Cóż, to najmniejszy z twoich problemów. – arshajii