@@ -1471,7 +1471,7 @@ def accept(self, visitor: TypeVisitor[T]) -> T:
1471
1471
1472
1472
def __hash__ (self ) -> int :
1473
1473
if self ._hash == - 1 :
1474
- self ._hash = hash ((self .type , self .args , self .last_known_value ))
1474
+ self ._hash = hash ((self .type , self .args , self .last_known_value , self . extra_attrs ))
1475
1475
return self ._hash
1476
1476
1477
1477
def __eq__ (self , other : object ) -> bool :
@@ -2895,7 +2895,6 @@ class UnionType(ProperType):
2895
2895
2896
2896
__slots__ = (
2897
2897
"items" ,
2898
- "_frozen_items" ,
2899
2898
"is_evaluated" ,
2900
2899
"uses_pep604_syntax" ,
2901
2900
"original_str_expr" ,
@@ -2915,7 +2914,6 @@ def __init__(
2915
2914
# We must keep this false to avoid crashes during semantic analysis.
2916
2915
# TODO: maybe switch this to True during type-checking pass?
2917
2916
self .items = flatten_nested_unions (items , handle_type_alias_type = False )
2918
- self ._frozen_items = frozenset (self .items )
2919
2917
# is_evaluated should be set to false for type comments and string literals
2920
2918
self .is_evaluated = is_evaluated
2921
2919
# uses_pep604_syntax is True if Union uses OR syntax (X | Y)
@@ -2933,14 +2931,14 @@ def can_be_false_default(self) -> bool:
2933
2931
return any (item .can_be_false for item in self .items )
2934
2932
2935
2933
def __hash__ (self ) -> int :
2936
- return hash (self ._frozen_items )
2934
+ return hash (frozenset ( self .items ) )
2937
2935
2938
2936
def __eq__ (self , other : object ) -> bool :
2939
2937
if not isinstance (other , UnionType ):
2940
2938
return NotImplemented
2941
2939
if self is other :
2942
2940
return True
2943
- return self ._frozen_items == other ._frozen_items
2941
+ return frozenset ( self .items ) == frozenset ( other .items )
2944
2942
2945
2943
@overload
2946
2944
@staticmethod
0 commit comments