Christian Heimes wrote:
Larry Hastings wrote:
+1 for exactly the reasons cited.  I think copy() and deepcopy() should
both be "essential" built-in functions.

I'm -0 on copy and -1 on deepcopy.

If you need a copy or a deepcopy of an object (except dicts, lists and
sets) you are most certainly using the wrong approach.

My +1 isn't based primarily on how often I would use copy/deepcopy, as I don't need them very often. (Although I do use it *ever*, unlike many builtins--complex(), divmod(), and reversed() just to name three.) Instead, it's based on the observation that copy and deepcopy seem to be a first-class part of the language. The following built-in classes implement __copy__; those that also implement __deepcopy__ are marked with an asterisk:
   array.array*
   collections.defaultdict
   collections.deque
   decimal.Decimal
   xml.etree.ElementTree*
   itertools.tee
   re.match*
   re.pattern*
All of those are implemented in C except for decimal.Decimal. This list was compiled from Python 3.0a2.

I pass no judgment on programmers using copy/deepcopy. Though I note that, if you are passed a merely dict-like / list-like / set-like object, I would feel more confident in using copy.copy() to copy it than using dict() / list() / set() to copy it; enforcing the type this way seems so un-duck-typing to me. I suppose I could go fishing in the object to see if it implements a copy() method (dicts and sets do, lists don't), but then the deprecation/removal of .copy() methods in favor of copy.copy was how this whole thread got started.

And, needless to say, there is simply no substitute for copy.deepcopy(),


/larry/
_______________________________________________
Python-3000 mailing list
Python-3000@python.org
http://mail.python.org/mailman/listinfo/python-3000
Unsubscribe: 
http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com

Reply via email to