Frank Millman wrote: > Hi all > > I noticed this a little while ago, but dismissed it as a curiosity. On > reflection, I decided to mention it here in case it indicates a problem. > > This is with python 3.3.2. > > C:\>python -m timeit -s "import copy" "copy.copy('a'*1000)" > 100000 loops, best of 3: 6.91 usec per loop > > C:\>python -m timeit -s "import copy" "copy.deepcopy('a'*1000)" > 100000 loops, best of 3: 11.8 usec per loop > > C:\>python -m timeit -s "import copy" "copy.copy(b'a'*1000)" > 10000 loops, best of 3: 79.9 usec per loop > > C:\>python -m timeit -s "import copy" "copy.deepcopy(b'a'*1000)" > 100000 loops, best of 3: 11.7 usec per loop > > As you can see, deepcopying a string is slightly slower than copying it. > > However, deepcopying a byte string is orders of magnitude quicker than > copying it. > > Actually, looking closer, it is the 'copy' that is slow, not the > 'deepcopy' that is quick.. > > Expected, or odd?
Definitely odd. For some reason deepcopy() special-cases the bytes type while copy() does not. If you fix that: $ python3.4 -m timeit -s 'import copy; b = b"a"*1000' 'copy.copy(b)' 10000 loops, best of 3: 21.2 usec per loop $ python3.4 -m timeit -s 'import copy; copy._copy_dispatch[bytes] = copy._copy_immutable; b = b"a"*1000' 'copy.copy(b)' 1000000 loops, best of 3: 0.971 usec per loop I think this an oversight rather than intentional. Please report to bugs.python.org. -- https://mail.python.org/mailman/listinfo/python-list