Khi deep=True
[mặc định], một đối tượng mới sẽ được tạo với một bản sao dữ liệu và chỉ số của đối tượng gọi. Các sửa đổi đối với dữ liệu hoặc chỉ mục của bản sao sẽ không được phản ánh trong đối tượng ban đầu [xem ghi chú bên dưới]
Khi deep=False
, một đối tượng mới sẽ được tạo mà không sao chép dữ liệu hoặc chỉ mục của đối tượng gọi [chỉ sao chép các tham chiếu đến dữ liệu và chỉ mục]. Mọi thay đổi đối với dữ liệu của bản gốc sẽ được phản ánh trong bản sao nông [và ngược lại]
Tạo một bản sao sâu, bao gồm một bản sao của dữ liệu và các chỉ số. Với deep=False
, cả chỉ số và dữ liệu đều không được sao chép
Loại đối tượng phù hợp với người gọi
ghi chú
Khi deep=True
, dữ liệu được sao chép nhưng các đối tượng Python thực tế sẽ không được sao chép đệ quy, chỉ có tham chiếu đến đối tượng. Điều này trái ngược với sao chép. deepcopy trong Thư viện chuẩn, sao chép đệ quy dữ liệu đối tượng [xem ví dụ bên dưới]
Trong khi các đối tượng
>>> s_copy = s.copy[] >>> s_copy a 1 b 2 dtype: int641 được sao chép khi
deep=True
, mảng numpy bên dưới không được sao chép vì lý do hiệu suất. Vì >>> s_copy = s.copy[] >>> s_copy a 1 b 2 dtype: int641 là bất biến nên dữ liệu cơ bản có thể được chia sẻ một cách an toàn và không cần bản sao
Vì gấu trúc không phải là luồng an toàn, hãy xem khi sao chép trong môi trường luồng
ví dụ
>>> 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
Bản sao nông so với bản sao mặc định [sâu]
>>> s = pd.Series[[1, 2], index=["a", "b"]] >>> deep = s.copy[] >>> shallow = s.copy[deep=False]
Bản sao nông chia sẻ dữ liệu và lập chỉ mục với bản gốc
>>> s is shallow False >>> s.values is shallow.values and s.index is shallow.index True
Bản sao sâu có bản sao dữ liệu và chỉ mục riêng
>>> s is deep False >>> s.values is deep.values or s.index is deep.index False
Cập nhật dữ liệu được chia sẻ bởi bản sao nông và bản gốc được phản ánh trong cả hai;
>>> 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
Lưu ý rằng khi sao chép một đối tượng chứa các đối tượng Python, bản sao sâu sẽ sao chép dữ liệu nhưng sẽ không thực hiện theo cách đệ quy. Cập nhật một đối tượng dữ liệu lồng nhau sẽ được phản ánh trong bản sao sâu