Add copyreg.copy() and copyreg.deepcopy()
Ninguém assumiu esta issue ainda.
- Linguagem predominante
- Python
- Estrelas
- 77.2k
- Forks
- 36k
- Métricas de merge de PRs
- Métricas de PR pendentes
Descrição
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
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Comece lendo a proposta de copyreg.copy() e copyreg.deepcopy() juntamente com os pontos de entrada copy.copy() e copy.deepcopy(). Revise o PR vinculado gh-153613 e verifique se os registros de tipos exatos têm precedência sobre métodos especiais e interfaces de pickle, enquanto a cópia permanece separada do pickling.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- python
- Domínio
- tooling
- Tipo de issue
- Funcionalidade
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Status de atividade
- Estagnada
- Clareza
- Claramente especificada
- Facilidade para iniciantes
- 25/100