[Tutor] Copying Variables
Sander Sweers
sander.sweers at gmail.com
Mon Jul 25 17:43:30 CEST 2011
On 25 July 2011 17:17, naheed arafat <naheedcse at gmail.com> wrote:
> I got a question in this context.
> suppose
> a={'a': 3, 'b': [1, 2], 5: 100}
> ------------------b=a -------------- vs----------
> b=copy.copy(a)------------
> ----------------------------------------------------
> b[5]=6 ---------------------------------------- b[5]=6
> output: ----------------------------------------- output:
> b={'a': 3, 'b': [1, 2], 5: 6}------------------- b={'a': 3, 'b': [1, 2],
> 5: 6}
> a={'a': 3, 'b': [1, 2], 5: 6} ------------------- a={'a': 3, 'b': [1, 2],
> 5: 100}
> that means b=a & b=copy.copy(a) aren't the same.
> but
> b['b'].append(3)
> output:
> b={'a': 3, 'b': [1, 2, 3], 5: 100}--------------b={'a': 3, 'b': [1, 2, 3],
> 5: 100}
> a={'a': 3, 'b': [1, 2, 3], 5: 100}--------------a={'a': 3, 'b': [1, 2, 3],
> 5: 100}
> now doesn't it mean that b=a & b=copy.copy(a) both are same?
No, b=a makes a new reference to the _same_ dict object.
b=copy.copy(a) creates a new dict object b. However it does not make a
copy of the *contents* of the dict object. To make a copy of the
contents of the dict use cop.deepcopy(). Play around with id() on the
a, b and their contents.
But do note that cpython caches small integers so the integer 3 will
have the same id (thus it is the same object).
greets
Sander
More information about the Tutor
mailing list