Python 2.7.11 (default, Apr 12 2016, 14:09:35)
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin
>>> class Empty:pass
>>> import sys
>>> print ("show",sys.getsizeof(Empty)) # i get 1016
('show', 104)
>>> print ("show",sys.getsizeof(Empty()))
('show', 72)
1016バイト。ご覧のとおり、これは実装固有のものです。その他の興味深いのサイズ、使用して、新しいスタイルのクラス:
>>> print ("show",sys.getsizeof(object()))
('show', 16)
>>> class Empty2(object):pass
>>> print ("show",sys.getsizeof(Empty2))
('show', 904)
>>> print ("show",sys.getsizeof(Empty2()))
('show', 64)
空のクラス定義がまだクラス定義、したがって、クラスオブジェクト(more here)である:クラス定義が入っている
、新しいですネームスペースが作成され、ローカルスコープとして使用されます。
クラス定義が正常に(最後から)残ると、クラスオブジェクトが作成されます。これは基本的に クラス定義によって作成された名前空間の内容のラッパーです...
すべてのクラスのオブジェクトを使用すると、実行して見属性の最小セットがあります。
>>> dir(Empty)
['__doc__', '__module__']
>>> dir(Empty2)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
をと他の実装の詳細も、予想以上に大きかったサイズの理由です。最後に
、そのクラスのインスタンスはクラスオブジェクトほどの大きな期待通り、確かにかなり小さく、ないこと。注意してくださいEmpty
はクラスオブジェクトです。 Empty()
はクラスインスタンスです。
私のマシンで '104'を返します。 – prashkr
は、私はあなたがPython2.x –
'104'に私のコードを実行し、それはすでにいくつかの荷物が付属しています' object'を継承します。 'dir(Empty)'を見てください。空リストではありません! – styvane