ฉันพยายามทำความเข้าใจกับhash
ฟังก์ชันPython ภายใต้ประทุน ฉันสร้างคลาสแบบกำหนดเองโดยที่อินสแตนซ์ทั้งหมดส่งคืนค่าแฮชเหมือนกัน
class C:
def __hash__(self):
return 42
ฉันเพิ่งสันนิษฐานว่าอินสแตนซ์เดียวของคลาสข้างต้นสามารถอยู่ในdict
ช่วงเวลาใดก็ได้ แต่ในความเป็นจริงdict
สามารถมีหลายองค์ประกอบที่มีแฮชเดียวกัน
c, d = C(), C()
x = {c: 'c', d: 'd'}
print(x)
# {<__main__.C object at 0x7f0824087b80>: 'c', <__main__.C object at 0x7f0823ae2d60>: 'd'}
# note that the dict has 2 elements
ฉันทดลองเพิ่มเติมอีกเล็กน้อยและพบว่าถ้าฉันแทนที่__eq__
วิธีการเพื่อให้อินสแตนซ์ทั้งหมดของคลาสเปรียบเทียบเท่ากันจะมีdict
เพียงอินสแตนซ์เดียวเท่านั้นที่อนุญาต
class D:
def __hash__(self):
return 42
def __eq__(self, other):
return True
p, q = D(), D()
y = {p: 'p', q: 'q'}
print(y)
# {<__main__.D object at 0x7f0823a9af40>: 'q'}
# note that the dict only has 1 element
ดังนั้นฉันจึงอยากรู้ว่า a dict
can มีหลายองค์ประกอบที่มีแฮชเดียวกันได้อย่างไร