Add copyreg.copy() and copyreg.deepcopy()
還沒有人認領這個 Issue。
- 主要語言
- Python
- 星號
- 77.2k
- 分支
- 36k
- PR 合併指標
- PR 指標待擷取
描述
Feature or enhancement
Proposal:
Add two registration functions to copyreg, following the copyreg.pickle() precedent:
copyreg.copy(type, function)— registers the shallow copy function for objects of type type; called asfunction(obj), like__copy__.copyreg.deepcopy(type, function)— registers the deep copy function; called asfunction(obj, memo), like__deepcopy__.
copy.copy() and copy.deepcopy() use the registered functions in preference to the special methods and the pickle interfaces. Registration is by exact type and does not affect pickling. This allows customizing copying of instances of types that cannot be modified — for example, treating an external library's immutable objects as atomic:
copyreg.deepcopy(thirdparty.Handle, lambda obj, memo: obj)
Today the only way to customize copying of a foreign type is copyreg.pickle(), which forces copy and pickle semantics to be the same. The private _copy_dispatch and _deepcopy_dispatch tables have been monkey-patched in the wild for lack of a public API — even by our own test_descr. The new registries replace this non-public way; _deepcopy_dispatch is now removed, as _copy_dispatch already was in gh-128118.
This was requested in gh-141737. Implementation is ready; PR to follow.
Has this already been discussed elsewhere?
Companion of PEP 837, whose Rationale notes that registries for other protocols will be proposed separately: https://discuss.python.org/t/pep-837-extensible-json-serialization/108124
Links to previous discussion of this feature:
- gh-141737 — the direct feature request
- gh-128118 — removal of the historical
_copy_dispatchtable
Linked PRs
- gh-153613
貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
研究方向
先閱讀 copyreg.copy() 和 copyreg.deepcopy() 提案,以及 copy.copy() 和 copy.deepcopy() 進入點。檢視連結的 PR gh-153613,並確認確切型別註冊的優先級高於特殊方法和 pickle 介面,同時複製操作仍與 pickling 分離。
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- python
- 領域
- tooling
- Issue 類型
- 功能
- 難度
- 3/5
- 預估耗時
- 1-2 天
- 活躍度
- 停滯
- 描述清晰度
- 描述清楚
- 新手友好度
- 25/100