pandas.Series.copy#

Series.copy(deep=True)[源代码]#

复制此对象的索引和数据。

什么时候 deep=True (默认),将使用调用对象的数据和索引的副本创建一个新对象。对副本数据或索引的修改不会反映在原始对象中(见下文注释)。

什么时候 deep=False ,则将创建一个新对象,而不复制调用对象的数据或索引(仅复制对数据和索引的引用)。对原始数据的任何更改都将反映在浅层副本中(反之亦然)。

参数
deep布尔值,默认为True

制作一份深度副本,包括数据和索引的副本。使用 deep=False 索引和数据都不会被复制。

退货
copy系列或DataFrame

对象类型与调用方匹配。

注意事项

什么时候 deep=True ,将复制数据,但不会递归复制实际的Python对象,仅复制对对象的引用。与此形成对比的是 copy.deepcopy 在标准库中,它递归地复制对象数据(请参见下面的示例)。

而当 Index 在以下情况下复制对象 deep=True 出于性能原因,不会复制底层的NumPy数组。自.以来 Index 是不可变的,底层数据可以安全地共享,不需要复制。

由于Pandas不是线程安全的,请参阅 gotchas 在线程环境中复制时。

示例

>>> 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

对浅层复制和原始共享的数据的更新都反映在两者中;深层复制保持不变。

>>> s[0] = 3
>>> shallow[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