🍾 Xarray is now 10 years old! 🎉

xarray.DataArray.copy

Contents

xarray.DataArray.copy#

DataArray.copy(deep=True, data=None)[source]#

Returns a copy of this array.

If deep=True, a deep copy is made of the data array. Otherwise, a shallow copy is made, and the returned data array’s values are a new view of this data array’s values.

Use data to create a new object with the same structure as original but entirely new data.

Parameters:
  • deep (bool, optional) – Whether the data array and its coordinates are loaded into memory and copied onto the new object. Default is True.

  • data (array_like, optional) – Data to use in the new object. Must have same shape as original. When data is used, deep is ignored for all data variables, and only used for coords.

Returns:

copy (DataArray) – New object with dimensions, attributes, coordinates, name, encoding, and optionally data copied from original.

Examples

Shallow versus deep copy

>>> array = xr.DataArray([1, 2, 3], dims="x", coords={"x": ["a", "b", "c"]})
>>> array.copy()
<xarray.DataArray (x: 3)> Size: 24B
array([1, 2, 3])
Coordinates:
  * x        (x) <U1 12B 'a' 'b' 'c'
>>> array_0 = array.copy(deep=False)
>>> array_0[0] = 7
>>> array_0
<xarray.DataArray (x: 3)> Size: 24B
array([7, 2, 3])
Coordinates:
  * x        (x) <U1 12B 'a' 'b' 'c'
>>> array
<xarray.DataArray (x: 3)> Size: 24B
array([7, 2, 3])
Coordinates:
  * x        (x) <U1 12B 'a' 'b' 'c'

Changing the data using the data argument maintains the structure of the original object, but with the new data. Original object is unaffected.

>>> array.copy(data=[0.1, 0.2, 0.3])
<xarray.DataArray (x: 3)> Size: 24B
array([0.1, 0.2, 0.3])
Coordinates:
  * x        (x) <U1 12B 'a' 'b' 'c'
>>> array
<xarray.DataArray (x: 3)> Size: 24B
array([7, 2, 3])
Coordinates:
  * x        (x) <U1 12B 'a' 'b' 'c'