@@ -225,6 +225,12 @@ def __new__(cls, data=None,
225225 verify_integrity = True , normalize = False ,
226226 closed = None , ambiguous = 'raise' , dtype = None , ** kwargs ):
227227
228+ # This allows to later ensure that the 'copy' parameter is honored:
229+ if isinstance (data , Index ):
230+ ref_to_data = data ._data
231+ else :
232+ ref_to_data = data
233+
228234 if name is None and hasattr (data , 'name' ):
229235 name = data .name
230236
@@ -305,7 +311,7 @@ def __new__(cls, data=None,
305311 raise TypeError ("Already tz-aware, use tz_convert "
306312 "to convert." )
307313
308- return data
314+ return data . _deepcopy_if_needed ( ref_to_data , copy )
309315
310316 if issubclass (data .dtype .type , compat .string_types ):
311317 data = tslib .parse_str_array_to_datetime (data , freq = freq ,
@@ -338,10 +344,7 @@ def __new__(cls, data=None,
338344 elif data .dtype == _INT64_DTYPE :
339345 if isinstance (data , Int64Index ):
340346 raise TypeError ('cannot convert Int64Index->DatetimeIndex' )
341- if copy :
342- subarr = np .asarray (data , dtype = _NS_DTYPE )
343- else :
344- subarr = data .view (_NS_DTYPE )
347+ subarr = data .view (_NS_DTYPE )
345348 else :
346349 if isinstance (data , (ABCSeries , Index )):
347350 values = data ._values
@@ -417,7 +420,7 @@ def __new__(cls, data=None,
417420 if inferred :
418421 subarr .offset = to_offset (inferred )
419422
420- return subarr
423+ return subarr . _deepcopy_if_needed ( ref_to_data , copy )
421424
422425 @classmethod
423426 def _generate (cls , start , end , periods , name , offset ,
0 commit comments