1. 程式人生 > 實用技巧 >copy (Data Types) – Python 中文開發手冊 - Break易站

copy (Data Types) – Python 中文開發手冊 - Break易站

[
  •   Python 中文開發手冊

    copy (Data Types) - Python 中文開發手冊

    Python中的賦值語句不會複製物件,它們會在目標和物件之間建立繫結。對於可變專案或包含可變專案的集合,有時需要副本,以便可以更改一個副本而不更改其他副本。該模組提供通用的淺層和深層複製操作(如下所述)。

    介面總結:

    copy.copy(x)

    返回x的淺表副本。

    copy.deepcopy(x)

    返回x的深層副本。

    exception copy.error

    引發模組特定的錯誤。

    淺層和深層複製之間的區別僅與複合物件(包含其他物件的物件,如列表或類例項)相關:

    甲淺拷貝構造新化合物物件,然後(在可能的範圍)插入引用到它在原始找到的物件。甲深層副本構造新化合物的物件,然後,遞迴地,插入拷貝到它在原始找到的物件的。

    對於淺拷貝操作不存在的深拷貝操作常常存在兩個問題:

    遞迴物件(直接或間接包含對自身的引用的複合物件)可能會導致遞迴迴圈。由於深拷貝複製了可能拷貝太多的所有內容,例如甚至應該在拷貝之間共享的管理資料結構。

    The deepcopy() function avoids these problems by:

    保留在當前複製過程中已經複製的物件的“備忘錄”字典; 和讓使用者定義的類覆蓋複製操作或複製的元件集合。

    這個模組不會複製像模組,方法,堆疊跟蹤,堆疊框架,檔案,套接字,視窗,陣列或類似型別的型別。它通過不變地返回原始物件來“複製”函式和類(淺而深)這與這些pickle模組處理的方式是一致的。

    例如,可以dict.copy()通過分配整個列表的一部分來製作淺表副本copied_list = original_list[:]。

    在版本2.5中更改:添加了複製功能。

    類可以使用相同的介面來控制他們用來控制酸洗的複製。有關pickle這些方法的資訊,請參閱模組的說明。該copy模組不使用copy_reg註冊模組。

    為了讓類定義自己的拷貝實現,它可以定義特殊的方法__copy__()和__deepcopy__()。前者被稱為實施淺拷貝操作; 沒有其他引數傳遞。後者被稱為執行深層複製操作; 它傳遞了一個引數,備忘錄字典。如果__deepcopy__()實現需要建立元件的深層副本,則應該deepcopy()使用元件作為第一個引數並將備註字典作為第二個引數來呼叫該函式。

  •   Python 中文開發手冊
    ]
  •   本文標題:copy (Data Types) – Python 中文開發手冊 - Break易站
    轉載請保留頁面地址:https://www.breakyizhan.com/python/34879.html