📢 Too many exams? Don’t know which one suits you best? Book Your Free Expert 👉 call Now!


    Question

    You are using Python's built-in dict to store custom

    objects. class MyObject:     def __init__(self, value):         self.value = value     # Missing or incorrect __eq__ and __hash__ methods     # def __eq__(self, other):     #     return self.value == other.value     #     # def __hash__(self):     #     return hash(self.value) obj1 = MyObject(10) obj2 = MyObject(10) my_dict = {} my_dict[obj1] = "First" my_dict[obj2] = "Second" # Intended to overwrite "First" If the __eq__ and __hash__ methods are *not* implemented in MyObject, what will be the state of my_dict after the code executes?
    A my_dict will contain obj1: "First" and obj2: "Second", treating them as distinct keys. Correct Answer Incorrect Answer
    B my_dict will contain obj1: "Second", as obj2 will overwrite obj1. Correct Answer Incorrect Answer
    C A TypeError will be raised because MyObject is not hashable. Correct Answer Incorrect Answer
    D my_dict will be empty. Correct Answer Incorrect Answer
    E my_dict will contain obj2: "First". Correct Answer Incorrect Answer

    Solution

    Correct Answer: A (Without __eq__ and __hash__, Python's default behavior is to compare objects by identity, so obj1 and obj2 are considered different keys even if their value is the same.) • Dry Run: o obj1 = MyObject(10): Creates an instance of MyObject at a specific memory location (e.g., id(obj1) might be 1234). o obj2 = MyObject(10): Creates a new, distinct instance of MyObject at a different memory location (e.g., id(obj2) might be 5678). o my_dict[obj1] = "First": obj1 (identified by its memory address/default hash) is used as a key, and "First" is stored. o my_dict[obj2] = "Second": obj2 (identified by its different memory address/default hash) is used as a new key, and "Second" is stored. o Since obj1 and obj2 are distinct objects in memory, the dictionary treats them as two separate keys, even though their value attribute is the same. o The final my_dict will contain two entries: {obj1: "First", obj2: "Second"}. • Why Correct Answer (A): my_dict will contain obj1: "First" and obj2: "Second", treating them as distinct keys. o This correctly describes the outcome when __eq__ and __hash__ are not overridden, leading to identity-based key comparison.

    Practice Next
    ask-question