classification
Title: weakref copy module interaction
Type: behavior Stage: patch review
Components: Library (Lib) Versions: Python 3.1, Python 2.7
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: gvanrossum, jafo, pitrou, rharris, rhettinger, tim.peters
Priority: normal Keywords: patch

Created on 2008-02-14 21:22 by rharris, last changed 2009-05-15 17:06 by pitrou. This issue is now closed.

Files
File name Uploaded Description Edit
copy.patch rharris, 2008-02-14 21:22 Possible patch to fix this
issue2116.patch pitrou, 2009-03-15 00:34
issue2116-2.patch pitrou, 2009-03-15 00:45
Messages (9)
msg62413 - (view) Author: Rick Harris (rharris) Date: 2008-02-14 21:22
The copy module will not properly copy/deepcopy weakrefs, it will bomb
out with __new__ not having enough args. This is a problem b/c it makes
deepcopying of objects that make use of Weak(Key|Value)Dictionaries
difficult.

To replicate:

import copy, weakref
class Test(object): pass
t = Test()
wr = weakref.ref(t)
wr_new = copy.copy(wr)
msg64101 - (view) Author: Sean Reifschneider (jafo) * (Python committer) Date: 2008-03-19 21:12
Rick: In the future, please provide a context or unified diff ("diff
-c") so that we get the file name that the diff is for and some
additional context.
msg64909 - (view) Author: Rick Harris (rharris) Date: 2008-04-04 01:06
Sorry about forgetting the -c arg! The patch is intended for
python/trunk/Lib/copy.py.

It looks like Raymond Hettinger has made a similar-ish change recently
to make Ellipsis copyable.
msg83606 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2009-03-14 23:49
Should a deepcopy of a weakref return the same weakref, or a weakref to
a new copied object?
Also, what about the optional callback?
msg83607 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2009-03-14 23:53
Hmm, forget that question. If we deepcopy the weakref target, it will be
destroyed just afterwards, making the deepcopied weakref useless.
msg83609 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2009-03-15 00:34
Here is a patch providing proper copy and deepcopy support, including
for weak dicts (the Proxy type is unsupported, though).
msg83612 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2009-03-15 00:45
Updated patch so that copied weakdicts are decoupled (adding an item to
the copy doesn't mutate the original).
msg86917 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2009-05-01 21:48
Raymond, Guido, any opinion on this one?
msg87822 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2009-05-15 17:06
Committed in r72662, r72670. Thanks!
History
Date User Action Args
2009-05-15 17:06:04pitrousetstatus: open -> closed
resolution: fixed
messages: + msg87822
2009-05-01 21:48:34pitrousetversions: + Python 3.1, Python 2.7, - Python 2.5
nosy: + gvanrossum, rhettinger

messages: + msg86917

assignee: tim.peters ->
stage: patch review
2009-03-15 00:45:18pitrousetfiles: + issue2116-2.patch

messages: + msg83612
2009-03-15 00:34:32pitrousetfiles: + issue2116.patch

messages: + msg83609
2009-03-14 23:53:07pitrousetmessages: + msg83607
2009-03-14 23:49:09pitrousetnosy: + pitrou
messages: + msg83606
2008-04-04 01:06:50rharrissetmessages: + msg64909
2008-03-19 21:12:13jafosetnosy: + jafo, tim.peters
messages: + msg64101
priority: normal
assignee: tim.peters
keywords: + patch
type: crash -> behavior
2008-02-14 21:22:34rharriscreate