很难理解为什么一个类的两个实例共享同一个内部对象

时间:2019-05-26 02:45:27

标签: python

我已经阅读了以下StackOverflow问题,我的情况类似,但(我认为)不同:

我的班级创建了一个实例级字典对象。但是,我的构造函数为该对象提供了默认值。当我尝试使用默认值创建类的实例时,它的行为突然就像是类级别的。

class store_a_dict:
    def __init__(self,dict_in={"A":0}):
        self.dict = dict_in

    def increment(self):
        self.dict["A"] += 1

    def print_me(self):
        print(self.dict)

test1 = store_a_dict({"A":3})
print("Initialised test1. Now test1 contains:")
test1.print_me()
test2 = store_a_dict()
print("Initialised test2 using default input. Now test2 contains:")
test2.print_me()
test2.increment()
print("Incremented test2. Now test2 contains:")
test2.print_me()
test3 = store_a_dict()
print("Initialised test3 using default input. Now test3 contains:")
test3.print_me()
print("We haven't touched test1, and it still contains:")
test1.print_me()

代码输出如下。我期望test3在使用{'A': 0}且没有输入的情况下初始化后应该包含store_a_dict()

Initialised test1. Now test1 contains:
{'A': 3}
Initialised test2 using default input. Now test2 contains:
{'A': 0}
Incremented test2. Now test2 contains:
{'A': 1}
Initialised test3 using default input. Now test3 contains:
{'A': 1}
We haven't touched test1, and it still contains:
{'A': 3}

看来,最明显的解决方法是将代码的第3行更改为self.dict = dict_in.copy(),但我想了解为什么这样做会如此。当在调用类的过程中提供一个dict_in的值并将其与实例隔离时,为什么为BottomNavigationView 取一个值感到非常高兴,但是当我尝试使用默认值时,突然出现成为类级别的对象?请帮助我更深入地了解这一点,以便避免类似的错误。

0 个答案:

没有答案