從copy
documentation:定製Python的`copy`模塊如何處理我的對象
類可以使用相同的接口來控制他們用來控制酸洗複製。
[...]
爲了一個類來定義自己的副本實現,它可以定義特殊的方法
__copy__()
和__deepcopy__()
那麼,哪一個是什麼呢? __setstate__()
和__getstate__()
酸洗時使用,還是__copy__()
和__deepcopy__()
?
從copy
documentation:定製Python的`copy`模塊如何處理我的對象
類可以使用相同的接口來控制他們用來控制酸洗複製。
[...]
爲了一個類來定義自己的副本實現,它可以定義特殊的方法
__copy__()
和__deepcopy__()
那麼,哪一個是什麼呢? __setstate__()
和__getstate__()
酸洗時使用,還是__copy__()
和__deepcopy__()
?
它的工作原理如下:如果一個類定義了__copy__
,則該優先級爲copy.copy
(同樣優先於copy.deepcopy
)。如果沒有定義這些非常特殊的特殊方法,那麼就會測試與酸洗和拆卸相同的機制(這包括但不限於__getstate__
和__setstate__
;我在我的書「Python in a Nutshell」中已經寫了更多關於這方面的內容「(@ilfaraone僅部分引用)
__setstate__()
和__getstate__()
。
請注意,複製文檔說他們可以使用10但它們並不一定這樣做。
請參閱this excerpt從Python in a Nutshell或this explanation在Python郵件列表上。