Python 如何防止将变量重新分配给同一类的对象而保留以前的数据?

Python 如何防止将变量重新分配给同一类的对象而保留以前的数据?,python,class,default-value,keyword-argument,Python,Class,Default Value,Keyword Argument,当使用新实例box重新分配box时,它包含与前一实例相同的数据,而不是为self.things分配一个空字典 我正在使用python 3.7.3 随机导入 类框: def uu init uu(self,things={}): 自我事物 定义(自我): return str(self.things) def将物品放置在物品位置(自身、物品、位置): self.things[位置]=thing 对于范围(2)中的i: box=box() 打印(框) 盒子。把东西放在合适的位置( 随机。随机范围(1

当使用新实例
box
重新分配box时,它包含与前一实例相同的数据,而不是为
self.things
分配一个空字典

我正在使用python 3.7.3

随机导入
类框:
def uu init uu(self,things={}):
自我事物
定义(自我):
return str(self.things)
def将物品放置在物品位置(自身、物品、位置):
self.things[位置]=thing
对于范围(2)中的i:
box=box()
打印(框)
盒子。把东西放在合适的位置(
随机。随机范围(10000),
随机。随机范围(10000)
)
输出:

$ python bugTest.py

{}

{652: 8968}
如果没有参数传递给新的
Box
实例,我希望它的
things
是一个空字典。
相反,它保留了以前的
框实例的
内容

问题在于,您正在为实例指定与默认词典完全相同的词典,因此在所有实例中共享它。将构造函数更改为

def __init__(self, things=None):
    self.things = {} if things is None else things

这确保了每个实例在没有任何给定的情况下都将一个新字典作为默认字典。

当您定义函数
def\uuuu init\uuuuuuuuuuuself(self,things={}):
things
初始化为空dict,并且每当调用
\uuu init\uuuuuuuuu
时,都会调用相同的dict(当您第二次调用它时,它可能不是空的)将被传递,当您没有明确指定
事物的值时

def __init__(self, things = None):
     things = things or {}
     ... 

使用
things或{}
方法的唯一(非常边际)缺点是,如果调用方显式提供了一个空字典,他们希望它成为
things
属性,他们不会将该空字典作为属性。您的意思是在输入数字之前打印