Python-更新类函数内的类自字典

Ari*_*l M 5 python dictionary

我在类中声明了一个字典(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)

我想了解问题是什么,而不仅仅是解决方案

PM *_*ing 4

您不想分配给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 名称和值的事实和神话