Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
581 views
in Technique[技术] by (71.8m points)

dictionary - Mutability of the **kwargs argument in Python

Consider a case where I change the kwargs dict inside a method:

def print_arg(**kwargs):
    print kwargs.pop('key')

If I call the method pop_arg with a dictionary like this:

mydict = {'key':'value'}
print_arg(**mydict)

will mydict be changed by this call?

I am also interested in a more detailed explanation of the underlying method calling mechanism that lets mydict change or not.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

No, mydict won't be changed. kwargs get unpacked into a new dictionary.

Consider the case where you have:

def print_arg(key=1,**kwargs):
    print key
    print kwargs

print_arg(**{'key':2,'foo':3,'bar':4})

In this case, it's obvious that kwargs is a different dict than you pass in because when it gets unpacked, it's missing the 'key' key.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...