@@ -75,24 +75,20 @@ def copy(x):
7575 if copier :
7676 return copier (x )
7777
78- try :
79- issc = issubclass (cls , type )
80- except TypeError : # cls is not a class
81- issc = False
82- if issc :
78+ if issubclass (cls , type ):
8379 # treat it as a regular class:
8480 return _copy_immutable (x )
8581
8682 copier = getattr (cls , "__copy__" , None )
87- if copier :
83+ if copier is not None :
8884 return copier (x )
8985
9086 reductor = dispatch_table .get (cls )
91- if reductor :
87+ if reductor is not None :
9288 rv = reductor (x )
9389 else :
9490 reductor = getattr (x , "__reduce_ex__" , None )
95- if reductor :
91+ if reductor is not None :
9692 rv = reductor (4 )
9793 else :
9894 reductor = getattr (x , "__reduce__" , None )
@@ -111,7 +107,7 @@ def copy(x):
111107def _copy_immutable (x ):
112108 return x
113109for t in (type (None ), int , float , bool , complex , str , tuple ,
114- bytes , frozenset , type , range , slice ,
110+ bytes , frozenset , type , range , slice , property ,
115111 types .BuiltinFunctionType , type (Ellipsis ), type (NotImplemented ),
116112 types .FunctionType , weakref .ref ):
117113 d [t ] = _copy_immutable
@@ -146,26 +142,22 @@ def deepcopy(x, memo=None, _nil=[]):
146142 cls = type (x )
147143
148144 copier = _deepcopy_dispatch .get (cls )
149- if copier :
145+ if copier is not None :
150146 y = copier (x , memo )
151147 else :
152- try :
153- issc = issubclass (cls , type )
154- except TypeError : # cls is not a class (old Boost; see SF #502085)
155- issc = 0
156- if issc :
148+ if issubclass (cls , type ):
157149 y = _deepcopy_atomic (x , memo )
158150 else :
159151 copier = getattr (x , "__deepcopy__" , None )
160- if copier :
152+ if copier is not None :
161153 y = copier (memo )
162154 else :
163155 reductor = dispatch_table .get (cls )
164156 if reductor :
165157 rv = reductor (x )
166158 else :
167159 reductor = getattr (x , "__reduce_ex__" , None )
168- if reductor :
160+ if reductor is not None :
169161 rv = reductor (4 )
170162 else :
171163 reductor = getattr (x , "__reduce__" , None )
@@ -198,14 +190,12 @@ def _deepcopy_atomic(x, memo):
198190d [complex ] = _deepcopy_atomic
199191d [bytes ] = _deepcopy_atomic
200192d [str ] = _deepcopy_atomic
201- try :
202- d [types .CodeType ] = _deepcopy_atomic
203- except AttributeError :
204- pass
193+ d [types .CodeType ] = _deepcopy_atomic
205194d [type ] = _deepcopy_atomic
206195d [types .BuiltinFunctionType ] = _deepcopy_atomic
207196d [types .FunctionType ] = _deepcopy_atomic
208197d [weakref .ref ] = _deepcopy_atomic
198+ d [property ] = _deepcopy_atomic
209199
210200def _deepcopy_list (x , memo , deepcopy = deepcopy ):
211201 y = []
0 commit comments