(original) (raw)
It's somewhat problematic. If I subclass dict with a different constructor, but I don't overload copy(), how can the dict.copy() method construct a correct instance of the subclass? Even if the constructor signatures match, how can dict.copy() make sure it copies all attributes properly? Without an answer to these questions I think it's better to admit defeat and return a dict instance -- classes that want to do better should overload copy().
I notice that Counter.copy() has all the problems I indicate here -- it works as long as you don't add attributes or change the constructor signature. I bet this isn't documented anywhere.
On Sun, Oct 29, 2017 at 9:40 AM, Brett Cannon <brett@python.org> wrote:
It probably should be more consistent and I have a vague recollection that this has been brought up before.
On Sun, Oct 29, 2017, 08:21 Serhiy Storchaka, <storchaka@gmail.com> wrote:The copy() methods of list, dict, bytearray, set, frozenset,
WeakValueDictionary, WeakKeyDictionary return an instance of the base
type containing the content of the original collection.
The copy() methods of deque, defaultdict, OrderedDict, Counter,
ChainMap, UserDict, UserList, WeakSet, ElementTree.Element return an
instance of the same type as the original collection.
The copy() method of mappingproxy returns a copy of the underlying
mapping (using its copy() method).
os.environ.copy() returns a dict.
Shouldn't it be more consistent?
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: https://mail.python.org/mailman/options/python-dev/ brett%40python.org
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: https://mail.python.org/mailman/options/python-dev/ guido%40python.org
--Guido van Rossum (python.org/\~guido)