【发布时间】:2014-09-18 06:06:09
【问题描述】:
#!/usr/bin/env python
def modify_dict():
d['two'] = 2
d = {'one':1}
modify_dict()
print d
我明白了
$ ./globaltest.py
{'two': 2, 'one': 1}
我希望只看到{'one':1},因为 d 没有在函数中声明为全局的。为什么 d 得到了两个键值对?
【问题讨论】:
-
因为
d是可变的,并且你在字典内部对d执行的操作不被视为函数的赋值操作。例如,使用列表(可变对象)+=运算符将在函数体中引发错误,但 .append 和 .extend 以及按索引分配将正常工作。 -
扩展 - 当你将 (
x = y) 分配给函数内的变量时,python 隐含地决定你指的是本地变量。语法d[k] = x解析为__setitem__调用 - 所以虽然它在语法上看起来像赋值,但它不是。
标签: python