1. Different equal int objects: obj1: type=, str=257, id=39305936 obj2: type=, str=257, id=39306160 a) obj1 is obj2: False b) obj1 == obj2: True c) [obj1] == [obj2]: True d) {obj1:'v'} == {obj2:'v'}: True e) {'k':obj1} == {'k':obj2}: True f) obj1 == obj2: True 2. Same int object: obj1: type=, str=257, id=39305936 obj2: type=, str=257, id=39305936 a) obj1 is obj2: True b) obj1 == obj2: True c) [obj1] == [obj2]: True d) {obj1:'v'} == {obj2:'v'}: True e) {'k':obj1} == {'k':obj2}: True f) obj1 == obj2: True 3. Different equal float objects: obj1: type=, str=257.0, id=5734664 obj2: type=, str=257.0, id=5734640 a) obj1 is obj2: False b) obj1 == obj2: True c) [obj1] == [obj2]: True d) {obj1:'v'} == {obj2:'v'}: True e) {'k':obj1} == {'k':obj2}: True f) obj1 == obj2: True 4. Same float object: obj1: type=, str=257.0, id=5734664 obj2: type=, str=257.0, id=5734664 a) obj1 is obj2: True b) obj1 == obj2: True c) [obj1] == [obj2]: True d) {obj1:'v'} == {obj2:'v'}: True e) {'k':obj1} == {'k':obj2}: True f) obj1 == obj2: True 5. Different float NaN objects: obj1: type=, str=nan, id=5734784 obj2: type=, str=nan, id=5734976 a) obj1 is obj2: False b) obj1 == obj2: False c) [obj1] == [obj2]: False d) {obj1:'v'} == {obj2:'v'}: False e) {'k':obj1} == {'k':obj2}: False f) obj1 == obj2: False 6. Same float NaN object: obj1: type=, str=nan, id=5734784 obj2: type=, str=nan, id=5734784 a) obj1 is obj2: True b) obj1 == obj2: False c) [obj1] == [obj2]: True d) {obj1:'v'} == {obj2:'v'}: True e) {'k':obj1} == {'k':obj2}: True f) obj1 == obj2: False 7. Different objects (with equal x) of class C (C.__eq__() implemented with equality of x, C.__ne__() returning NotImplemented): obj1: type=, str=C(256), id=39406504 obj2: type=, str=C(256), id=39406616 a) obj1 is obj2: False C.__eq__(): self=39406504, other=39406616, returning True b) obj1 == obj2: True C.__eq__(): self=39406504, other=39406616, returning True c) [obj1] == [obj2]: True C.__eq__(): self=39406616, other=39406504, returning True d) {obj1:'v'} == {obj2:'v'}: True C.__eq__(): self=39406504, other=39406616, returning True e) {'k':obj1} == {'k':obj2}: True C.__eq__(): self=39406504, other=39406616, returning True f) obj1 == obj2: True 8. Same object of class C (C.__eq__() implemented with equality of x, C.__ne__() returning NotImplemented): obj1: type=, str=C(256), id=39406504 obj2: type=, str=C(256), id=39406504 a) obj1 is obj2: True C.__eq__(): self=39406504, other=39406504, returning True b) obj1 == obj2: True c) [obj1] == [obj2]: True d) {obj1:'v'} == {obj2:'v'}: True e) {'k':obj1} == {'k':obj2}: True C.__eq__(): self=39406504, other=39406504, returning True f) obj1 == obj2: True 9. Different objects (with equal x) of class D (D.__eq__() implemented with inequality of x, D.__ne__() returning NotImplemented): obj1: type=, str=C(256), id=39407064 obj2: type=, str=C(256), id=39406952 a) obj1 is obj2: False D.__eq__(): self=39407064, other=39406952, returning False b) obj1 == obj2: False D.__eq__(): self=39407064, other=39406952, returning False c) [obj1] == [obj2]: False D.__eq__(): self=39406952, other=39407064, returning False d) {obj1:'v'} == {obj2:'v'}: False D.__eq__(): self=39407064, other=39406952, returning False e) {'k':obj1} == {'k':obj2}: False D.__eq__(): self=39407064, other=39406952, returning False f) obj1 == obj2: False 10. Same object of class D (D.__eq__() implemented with inequality of x, D.__ne__() returning NotImplemented): obj1: type=, str=C(256), id=39407064 obj2: type=, str=C(256), id=39407064 a) obj1 is obj2: True D.__eq__(): self=39407064, other=39407064, returning False b) obj1 == obj2: False c) [obj1] == [obj2]: True d) {obj1:'v'} == {obj2:'v'}: True e) {'k':obj1} == {'k':obj2}: True D.__eq__(): self=39407064, other=39407064, returning False f) obj1 == obj2: False