我在类中声明了一个字典(self.d1)。调用f1函数后,self.d1需要更新为f1内声明的本地字典
import copy
class num:
def __init__(self):
self.d1 = {'a':1, 'b':2, 'c':3}
self.f1(self.d1)
print self.d1
def f1(self,d):
d2 = {'d':4, 'e':5, 'f':6}
d = copy.deepcopy(d2)
test = num()
Run Code Online (Sandbox Code Playgroud)
我期望输出是:
{'d':4, 'e':5, 'f':6}
Run Code Online (Sandbox Code Playgroud)
但输出是
{'a':1, 'b':2, 'c':3}
Run Code Online (Sandbox Code Playgroud)
我想了解问题是什么,而不仅仅是解决方案
您不想分配给din f1(),因为这会丢失它必须分配的旧绑定self.d1。所以赋值之后d只是一个局部变量f1()。
但你可以通过这个实现你想要的:
class num:
def __init__(self):
self.d1 = {'a':1, 'b':2, 'c':3}
self.f1(self.d1)
print self.d1
def f1(self,d):
d2 = {'d':4, 'e':5, 'f':6}
d.clear()
d.update(d2)
test = num()
Run Code Online (Sandbox Code Playgroud)
输出
{'e': 5, 'd': 4, 'f': 6}
Run Code Online (Sandbox Code Playgroud)
请注意,我的代码没有对din进行赋值f1(),它只进行会改变现有对象的调用。
有关此主题和相关主题的更多参考,请参阅 SO stalwart Ned Batchelder 撰写的这篇优秀文章:关于 Python 名称和值的事实和神话
| 归档时间: |
|
| 查看次数: |
6632 次 |
| 最近记录: |