Vì vậy, danh sách là unhashable:Điều gì làm cho danh sách không thể sửa được?
>>> { [1,2]:3 }
TypeError: unhashable type: 'list'
Sau đây page đưa ra một lời giải thích:
Một danh sách là một loại có thể thay đổi, và không thể được sử dụng như một chìa khóa trong một cuốn từ điển (nó có thể thay đổi trong - nơi làm cho khóa không còn có thể định vị được trong bảng băm nội bộ của từ điển ).
Tôi hiểu tại sao không nên sử dụng các đối tượng có thể thay đổi được làm khóa từ điển. Tuy nhiên, Python tăng cùng một ngoại lệ ngay cả khi tôi đang đơn giản là cố gắng để băm một danh sách (không phụ thuộc vào sự sáng tạo từ điển)
>>> hash([1,2])
TypeError: unhashable type: 'list'
Liệu Python làm điều này như một sự đảm bảo rằng các loại có thể thay đổi sẽ không bao giờ được sử dụng như phím từ điển? Hoặc là có một lý do khác làm cho các đối tượng có thể thay đổi không thể băm, bất kể tôi định sử dụng chúng như thế nào?
'băm()' chỉ đơn giản gọi phương thức '__hash__' của đối tượng và đó chính xác là những gì dicts làm. –
Điều gì làm * bạn định làm gì với băm? Động lực là băm của một đối tượng không nên thay đổi, và các đối tượng bằng nhau thường phải băm giống nhau. – geoffspear