Python-替换可变对象的函数
我试图替换dict对象的值。以下脚本有效:Python-替换可变对象的函数,python,python-2.7,Python,Python 2.7,我试图替换dict对象的值。以下脚本有效: > d = {'a': 1} > def f(d): > return {'b': 2} > d = f(d) > print d {'b': 2} 但这一个不是: > d = {'a': 1} > def replace(d): > d = {'b':2} > replace(d) > print d {'a': 1} 到底为什么? 因此,是否有必要对所有键执行d.pop
> d = {'a': 1}
> def f(d):
> return {'b': 2}
> d = f(d)
> print d
{'b': 2}
但这一个不是:
> d = {'a': 1}
> def replace(d):
> d = {'b':2}
> replace(d)
> print d
{'a': 1}
到底为什么?因此,是否有必要对所有键执行
d.pop(k)
,然后d.update(…)
才能更改整个dict?重新绑定与清除可变值不同。您必须清除字典并为其提供新的键和值:
def replace(d):
d.clear()
d.update({'b': 2})
名称(变量)只是对对象的引用,将新字典分配给本地名称d
会将名称重新绑定到新对象;上一个对象始终不受影响
您可以将
d
设为全局,以便将全局名称重新绑定到新词典,但任何其他剩余引用仍将指向未更改的原始词典。清除实际的dictionary对象将起作用,而不管指向它的引用数是多少。重新绑定与清除可变值不同。您必须清除字典并为其提供新的键和值:
def replace(d):
d.clear()
d.update({'b': 2})
名称(变量)只是对对象的引用,将新字典分配给本地名称d
会将名称重新绑定到新对象;上一个对象始终不受影响
您可以将
d
设为全局,以便将全局名称重新绑定到新词典,但任何其他剩余引用仍将指向未更改的原始词典。清除实际字典对象将起作用,而不管指向它的引用数是多少。内部replace
中的d
是一个局部变量,分配给它不会替换全局字典d
这可以通过使用global
关键字来解决
但是,清除字典并用新值重新填充它可能确实更好。在
replace
中的d
是一个局部变量,分配给它不会替换全局字典d
这可以通过使用global
关键字来解决
但是,清除字典并重新填充新值可能确实更好。如果OP摸索
d[:]=[1]
和d=[1]
之间的差异,这就是…:)如果OP搜索到d[:]=[1]
和d=[1]
之间的差异-这就是…:)