请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于对象大小的问题

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__相当于加了几个固定的指针。

0 回复 有任何疑惑可以回复我~
  • 提问者 绝世风华3625689 #1
    非常感谢老师!说到指针的话我就可以理解了。
    回复 有任何疑惑可以回复我~ 2017-10-31 18:12:55
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号