On Mon, Mar 16, 2009 at 7:48 PM, Aaron Garrett
<aaron.lee.garr...@gmail.com> wrote:
> I have spent quite a bit of time trying to find the answer on this
> group, but I've been unsuccessful. Here is what I'd like to be able to
> do:
>
> def A(**kwargs):
>    kwargs['eggs'] = 1
>
> def B(**kwargs):
>    print(kwargs)
>
> def C(**kwargs):
>    A(**kwargs)
>    B(**kwargs)
>
> I'd like to be able to make a call like:
>
> C(spam=0)
>
> and have it print
> {'spam': 0, 'eggs': 1}
>
> But it doesn't do that. Instead, it gives
> {'spam': 0}
>
> I was under the impression that kwargs is passed by reference and,

It's not. Semantically, the dictionary broken up into individual
keyword arguments on the calling side, and then on the callee side, a
fresh dictionary is created from the individual arguments. So while
Python uses call-by-object, extra packing/unpacking takes place in
this case, causing copying, and thus your problem.

Cheers,
Chris

-- 
I have a blog:
http://blog.rebertia.com
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to