import sys class Person01(): def __init__(self, HP, MP, Attack, Defense): self.HP = HP self.MP = MP self.Attack = Attack self.Defense = Defense class Person02(): __slots__ = ['HP', 'MP', 'Attack', 'Defense'] def __init__(self, HP, MP, Attack, Defense): self.HP = HP self.MP = MP self.Attack = Attack self.Defense = Defense person01 = Person01(300, 40, 120, 450) person02 = Person02(300, 40, 120, 450) print(set(dir(person01)) - set(dir(person02))) person01.__dict__["test"] = "test" print(sys.getsizeof(person01.__dict__)) print(sys.getsizeof(person01), "Person01") print(sys.getsizeof(person02), "Person02")
输出结果为:
{'__dict__', '__weakref__'}
864
56 Person01
72 Person02老师,麻烦资讯两个问题,第一个问题:
上述代码中,通过getsizeof()返回的结果应该是字节,但输出字典的大小为800+字节,而两个对象本身才不到100字节。我的理解是,__dict__字典是属于对象的一部分,所以对象的大小应该比字典要大,至少要包括了字典。所以代码得出的结果和我理解的有些冲突。我希望知道,为什么会出现这种情况呢?
第二个问题是:
person01对象是包含字典的,而person02是不包含字典的,而最终输出的对象大小,反而是person02比较大。这是为什么呢?