-
-
Notifications
You must be signed in to change notification settings - Fork 5.6k
Description
This is a potential Julia 2.0 change that arose while teaching newbies. One student got bit by copy
's shallow behavior; this is also a common issue on discourse and stackoverflow. (Those are examples, and there are duplicates.) A potential solution is to not have copy
at all, instead offering a choice between shallowcopy
or deepcopy
.
This has downsides: (1) shallowcopy
is longer to type, (2) other languages (e.g., Python) make the same naming choices we're currently making, and (3) it might cause more people to use deepcopy
out of safety in cases where it's not actually necessary (deepcopy
is much slower).
The main upside is that by naming it shallowcopy
we encourage people to understand what it's doing and thus to think about whether they want shallow or deep in this particular instance. Bugs arising from a shallow copy can be quite difficult to diagnose, typically costing orders-of-magnitude more time than typing a few extra characters.
A downside-to-the-upside is that this isn't unique to copy
: fill
, pass-by-reference, and other circumstances can trigger what is essentially the same confusion, and I don't see as simple a solution for these.