[英]Modifying Local Within Function Changes Global Passed to Function in Python
[英]Modifying global dictionary in python within a function
#!/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同时获得两个键值对?
一个快速的解决方法是在功能的本地范围内复制字典。
import copy
d = {'one':1}
def modify_dict():
local_d = copy.deepcopy(d)
local_d['two'] = 2
print local_d
modify_dict()
print d
您将看到以下输出:
>>>{'two': 2, 'one': 1}
>>>{'one': 1}
Python搜索变量基于LEGB
规则:
Local, Enclosing functions, Global, Built-in
调用函数时,它将尝试查找名为d的变量,并且自从在调用函数之前创建d以来便会在全局范围内查找。 并且由于d是可变的,因此它将被更新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.