关于对象大小的问题
来源:7-2 如何为创建大量实例节省内存
绝世风华3625689
2017-10-31
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比较大。这是为什么呢?
写回答
1回答
-
你好奇这种问题, 我猜想你学过C, 你可以理解为计算Person对象时, __dict__是个指针. __slots__相当于加了几个固定的指针。
012017-10-31
相似问题
不明白为什么需要可迭代对象?
回答 2
3-3生成器对象问题
回答 1