Python 从方法返回self.\uuu dict\uuu

Python 从方法返回self.\uuu dict\uuu,python,deep-copy,Python,Deep Copy,我正在使用来自第三方的一个很好的小python模块,我遇到了一点让我的大脑扭曲的问题,我最关心的是数据完整性 快速总结:有一个类方法大致如下: def as_dict(self): ##adjust some attributes that don't make sense outside this scope ##... ... ... return self.__dict__ 我正在手动使用这个方法的结果,但是我在一些地方传递它,我不知道这些函数实际

我正在使用来自第三方的一个很好的小python模块,我遇到了一点让我的大脑扭曲的问题,我最关心的是数据完整性

快速总结:有一个类方法大致如下:

def as_dict(self):
    ##adjust some attributes that don't make sense outside this scope        
    ##... ... ...
    return self.__dict__
我正在手动使用这个方法的结果,但是我在一些地方传递它,我不知道这些函数实际上对返回的dict做了什么

现在,这是安全的吗,还是一些散乱的函数会开始干扰我的实例属性?我最初认为“self”以某种方式保护了数据集,我正在传递数据的副本,但现在我想知道是否传递了对实例内存的引用?(其中有嵌套的可变项)


我应该这样做吗:
返回副本。deepcopy(self.\u dict\u)
如果你想确保传递副本,
复制。deepcopy(self.\u dict\u)
将是一条路。

如果你想确保传递副本,那么,
复制。deepcopy(self.\u dict\u)
将是一条路。

你是正确的,实例dict与任何其他dict一样是完全可变的。像这样返回dict是不寻常的。也许出于某种原因,它无意在实例之外进行修改。看起来这可能是个糟糕的设计

有时人们会做这样可怕的事情,因为他们认为这比使用全局变量要好

复制并不是一个好办法。它可能非常慢,只是隐藏了潜在的设计问题


复制的另一种方法是包装dict,这样它就不会被意外修改。

没错,实例dict与其他dict一样是完全可变的。像这样返回dict是不常见的。也许出于某种原因,它无意在实例之外进行修改。看起来这可能是个糟糕的设计

有时人们会做这样可怕的事情,因为他们认为这比使用全局变量要好

复制并不是一个好办法。它可能非常慢,只是隐藏了潜在的设计问题


复制的另一种方法是包装dict,这样它就不会被意外修改。

您是否测试过代码中描述的行为?我没有,现在也无法完全测试。我想在我编辑这个函数的时候,有人提出了一些警告,因为这似乎是一个有待解决的问题。是self.\uuuu dict\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。我想在我编辑这个函数的时候,有人提出了一些警告,因为这似乎是一个有待解决的问题。self.\uuu dict\uuuu在任何方面都是特殊的,或者它只是另一个字典?实现此方法的类提供dict的接口(尽管它不继承)。包括getitem、get、has_键、items、,。。。(同样,不继承)。那么作者是否已经采取了预防措施,或者是self.\uuuu dict\uuuuuuuuuu裸体的?我挖掘了一点,我认为第三方模块正在为JSON/XML转换提供dict返回值。我想他们现在足够安全了。。。不过谢谢。实现此方法的类确实提供了dict的接口(尽管它不继承)。包括getitem、get、has_键、items、,。。。(同样,不继承)。那么作者是否已经采取了预防措施,或者是self.\uuuu dict\uuuuuuuuuu裸体的?我挖掘了一点,我认为第三方模块正在为JSON/XML转换提供dict返回值。我想他们现在足够安全了。。。谢谢你。