pandas.Series.copy#

Series.copy(глубокий=True)[источник]#

Создать копию индексов и данных этого объекта.

Когда deep=True (по умолчанию), будет создан новый объект с копией данных и индексов вызывающего объекта. Изменения данных или индексов копии не отразятся на исходном объекте (см. примечания ниже).

Когда deep=False, новый объект будет создан без копирования данных или индекса вызывающего объекта (копируются только ссылки на данные и индекс). Любые изменения данных оригинала будут отражены в поверхностной копии (и наоборот).

Примечание

The deep=False поведение, как описано выше, изменится в pandas 3.0. Копирование при записи будет включено по умолчанию, что означает, что «поверхностная» копия возвращается с deep=False по-прежнему избежит создания немедленной копии, но изменения данных оригинала нет больше не будет отражаться в поверхностной копии (или наоборот). Вместо этого используется механизм ленивого (отложенного) копирования, который копирует данные только при внесении изменений в оригинал или поверхностную копию.

Вы уже можете получить будущее поведение и улучшения, включив copy on write pd.options.mode.copy_on_write = True

Параметры:
глубокийbool, по умолчанию True

Создать глубокую копию, включая копию данных и индексов. С deep=False ни индексы, ни данные не копируются.

Возвращает:
Series или DataFrame

Тип объекта соответствует вызывающему объекту.

Примечания

Когда deep=Trueданные копируются, но фактические объекты Python не будут копироваться рекурсивно, только ссылка на объект. Это отличается от copy.deepcopy в стандартной библиотеке, которая рекурсивно копирует объектные данные (см. примеры ниже).

В то время как Index объекты копируются, когда deep=True, базовый массив numpy не копируется по соображениям производительности. Поскольку Index является неизменяемым, базовые данные можно безопасно использовать совместно, и копия не требуется.

Поскольку pandas не является потокобезопасным, см. подводные камни при копировании в многопоточной среде.

Когда copy_on_write в конфигурации pandas установлено True, copy_on_write конфигурация вступает в силу даже когда deep=False. Это означает, что любые изменения в скопированных данных приведут к созданию новой копии данных при записи (и наоборот). Изменения, внесенные в исходную или скопированную переменную, не отразятся в соответствующей. См. Copy_on_Write для получения дополнительной информации.

Примеры

>>> s = pd.Series([1, 2], index=["a", "b"])
>>> s
a    1
b    2
dtype: int64
>>> s_copy = s.copy()
>>> s_copy
a    1
b    2
dtype: int64

Поверхностное копирование в сравнении с копированием по умолчанию (глубоким):

>>> s = pd.Series([1, 2], index=["a", "b"])
>>> deep = s.copy()
>>> shallow = s.copy(deep=False)

Поверхностная копия разделяет данные и индекс с оригиналом.

>>> s is shallow
False
>>> s.values is shallow.values and s.index is shallow.index
True

Глубокая копия имеет собственную копию данных и индекса.

>>> s is deep
False
>>> s.values is deep.values or s.index is deep.index
False

Обновления данных, общих для поверхностной копии и оригинала, отражаются в обоих (ПРИМЕЧАНИЕ: это больше не будет верно для pandas >= 3.0); глубокая копия остаётся неизменной.

>>> s.iloc[0] = 3
>>> shallow.iloc[1] = 4
>>> s
a    3
b    4
dtype: int64
>>> shallow
a    3
b    4
dtype: int64
>>> deep
a    1
b    2
dtype: int64

Обратите внимание, что при копировании объекта, содержащего объекты Python, глубокое копирование скопирует данные, но не будет делать это рекурсивно. Обновление вложенного объекта данных отразится в глубокой копии.

>>> s = pd.Series([[1, 2], [3, 4]])
>>> deep = s.copy()
>>> s[0][0] = 10
>>> s
0    [10, 2]
1     [3, 4]
dtype: object
>>> deep
0    [10, 2]
1     [3, 4]
dtype: object

Copy-on-Write установлен в true, поверхностная копия не изменяется при изменении исходных данных:

>>> with pd.option_context("mode.copy_on_write", True):
...     s = pd.Series([1, 2], index=["a", "b"])
...     copy = s.copy(deep=False)
...     s.iloc[0] = 100
...     s
a    100
b      2
dtype: int64
>>> copy
a    1
b    2
dtype: int64