scared about refrences...

J. Clifford Dyer jcd at sdf.lonestar.org
Tue Oct 31 00:06:01 CET 2006


SpreadTooThin wrote:
> Steven D'Aprano wrote:
>> On Mon, 30 Oct 2006 13:10:47 -0800, SpreadTooThin wrote:
>>
>>>>> How do I specify or create deep copies of objects that may contain
>>>>> other objects that may contain other object that may contain other
>>>>> objects....
>>>> See the `copy` module especially `copy.deepcopy()`.
>>>>
>>> This appears to be the right thing to do to me.. (but what do I know?)
>> Yes, copy.deepcopy() is the thing you want.
>>
>> But remember Fredrik's advice that well-designed Python code should not
>> need to copy data structures often. I don't think I've ever needed to use
>> deepcopy, and rarely copy.copy().
>>
>> In general, functions should not modify their caller's data. So this is
>> bad practice:
>>
>> def print_list(alist):
>>     """Print a sorted list"""
>>     alist.sort()  # modifies the caller's data -- bad!
>>     for index, value in enumerate:
>>         print "Value %s at index %d" % (index, value)
>>
>> This is better:
>>
>> def print_list(alist):
>>     """Print a sorted list"""
>>     alist = alist[:]  # makes a local shallow copy of the list
>>     alist.sort()  # safe to modify now
>>     for index, value in enumerate:
>>         print "Value %s at index %d" % (index, value)
>>
>> But notice that you only need a shallow copy, not a deep copy, because you
>> aren't modifying the objects within the list, only the list itself.
>>
>>
>>
>>> I tried this which more closely resembles my project but this doesn't
>>> work:
>> Unfortunately my crystal ball is back at the shop being repaired, so
>> you'll have to explain what "doesn't work" means in this case. Does it
>> raise an exception? If so, please post the exception. Does it do something
>> different from what you expected? Then what did you expect, and what did
>> it do?
>>
> I seems that some of the objects in the list don't get along well with
> deep copy..
> See my second example post that used deepcopy... When run blows up...
> 
When it blows up, is there a lot of shrapnel, or just smoke and fire? 
Is the shrapnel mostly metal, or is it plastic and glass?

In short, if we don't know what's happening, we can't help.
* Did the program spit out a bunch of text you didn't understand?
   If so, show us the text.  That text may be incomprehensible at first,
   but it contains crucial clues.

* Did it close your python window without a word?
   Tell us.

* Did your computer freeze up?
   Tell us.

If you don't tell us what went wrong *exactly*, you won't get a 
satisfactory answer.

Cheers,
Cliff



More information about the Python-list mailing list