"Alex" <[EMAIL PROTECTED]> wrote in news:[EMAIL PROTECTED]: >>>> D={'Python': 'good', 'Basic': 'simple'} >>>> E=D.copy() >>>> E > {'Python': 'good', 'Basic': 'simple'} >>>> D['Basic']='oh my' >>>> D > {'Python': 'good', 'Basic': 'oh my'} >>>> E > {'Python': 'good', 'Basic': 'simple'} >>>> > > Hmm, this looks like a deep copy to me?? I also tried >
It is shallow, but strings are immutable so the difference is fairly moot. >>>> D={'Python': 'good', 'Basic': 'simple'} >>>> E=D >>>> E > {'Python': 'good', 'Basic': 'simple'} >>>> E['Basic']='oh my' >>>> E > {'Python': 'good', 'Basic': 'oh my'} >>>> D > {'Python': 'good', 'Basic': 'oh my'} >>>> > Here, E and D are different names for the same object. There is no copy. > which looks like a shallow copy to me?? So my hypothesis is that > E=D is a shallow copy while E=D.copy() is a deep copy. > > So is the documentation wrong when they claim that D.copy() > returns a shallow copy of D, or did I misunderstand the > difference between a deep and shallow copy? Sort of, some examples: Here d1 and d2 are copies. They can be independently changed to refer to different objects: >>> d1={'a':1,'b':2} >>> d2=d1.copy() >>> d1['a']=3 >>> d2['b']=4 >>> d1 {'a': 3, 'b': 2} >>> d2 {'a': 1, 'b': 4} Again, d3 and d4 are copies, but instead of changing the objects they refer to, we change the contents of the objects they refer to: >>> d3={'c':[3],'d':[4]} >>> d4=d3.copy() >>> d3['c'][0]=5 >>> d4['d'][0]=6 >>> d3 {'c': [5], 'd': [6]} >>> d4 {'c': [5], 'd': [6]} Both cases are shallow copies. In a deep copy, altering the contents of d3['c'] would have no impact on the contents of d4['c']. max -- http://mail.python.org/mailman/listinfo/python-list