将python dictionary传递给类会更改dictionary的值

将python dictionary传递给类会更改dictionary的值,python,class,python-2.7,dictionary,Python,Class,Python 2.7,Dictionary,**我已经看到了这些帖子,但不知道如何解决我的问题: 我创建一个字典,然后将它作为输入参数传递给一个类。该类有一个内部函数,用于处理输入字典的值。问题是在实例化类之后,原始字典的值也会改变。下面是一个简单的例子: class foo(object): def __init__(self,myDict): self.myDict = myDict self.f() def f(self): for key in self.myDic

**我已经看到了这些帖子,但不知道如何解决我的问题:

我创建一个字典,然后将它作为输入参数传递给一个类。该类有一个内部函数,用于处理输入字典的值。问题是在实例化类之后,原始字典的值也会改变。下面是一个简单的例子:

class foo(object):
    def __init__(self,myDict):
        self.myDict = myDict
        self.f()
    def f(self):
        for key in self.myDict.keys():
            self.myDict[key] += 1

d = {'a':1,'b':2}
print 'd (before passing to the class) = ',d
inst = foo(myDict = d)
print 'inst.myDict = ',inst.myDict
print 'd (after passing to the class) = ',d
以下是输出:

d (before passing to the class) =  {'a': 1, 'b': 2}
inst.myDict =  {'a': 2, 'b': 3}
d (after passing to the class) =  {'a': 2, 'b': 3}

正如您所看到的,在实例化类之后,原始字典“d”的值也发生了变化。我怎样才能避免这种情况?我需要多次使用d来创建这个类(同时更改其他输入参数),并且不希望每次实例化时都重新定义“d”。

一般来说,您需要将dict的副本传递给您的类,或者您可以在类中创建副本

self.myDict = myDict.copy()

一般来说,您需要将dict的副本传递给您的类--或者您可以在类内制作副本

self.myDict = myDict.copy()

一般来说,您需要将dict的副本传递给您的类--或者您可以在类内制作副本

self.myDict = myDict.copy()

一般来说,您需要将dict的副本传递给您的类--或者您可以在类内制作副本

self.myDict = myDict.copy()

您正在共享对Python字典的引用;如果不打算这样做,请使用副本
dict.copy()
创建了一个字典的浅显副本。除了你在这个问题上提到的前一篇文章外,我发现这一点非常清楚和有启发性:你正在共享对Python字典的引用;如果不打算这样做,请使用副本
dict.copy()
创建了一个字典的浅显副本。除了你在这个问题上提到的前一篇文章外,我发现这一点非常清楚和有启发性:你正在共享对Python字典的引用;如果不打算这样做,请使用副本
dict.copy()
创建了一个字典的浅显副本。除了你在这个问题上提到的前一篇文章外,我发现这一点非常清楚和有启发性:你正在共享对Python字典的引用;如果不打算这样做,请使用副本
dict.copy()
创建字典的浅层副本。除了您在本期文章中提到的内容外,我发现这一点非常清楚且具有启发性:我只是想知道,当我处理类实例列表或值为类实例的字典时,此解决方案是否也有效?除了字典本身之外,我是否需要告诉python(深层)复制类实例?@user3076813——这将创建一个浅层副本。如果你需要一个深度副本,那么看看我只是想知道,当我处理一个类实例列表或者一个值是类实例的字典时,这个解决方案是否也有效?除了字典本身之外,我是否需要告诉python(深层)复制类实例?@user3076813——这将创建一个浅层副本。如果你需要一个深度副本,那么看看我只是想知道,当我处理一个类实例列表或者一个值是类实例的字典时,这个解决方案是否也有效?除了字典本身之外,我是否需要告诉python(深层)复制类实例?@user3076813——这将创建一个浅层副本。如果你需要一个深度副本,那么看看我只是想知道,当我处理一个类实例列表或者一个值是类实例的字典时,这个解决方案是否也有效?除了字典本身之外,我是否需要告诉python(深层)复制类实例?@user3076813——这将创建一个浅层副本。如果你需要一份深度拷贝,那么看看